import{S as Oo,i as Mo,s as Ro,e as l,k as d,w as g,t as a,M as No,c as o,d as t,m as c,a as i,x as v,h as n,b as m,F as s,g as u,y as x,q as b,o as _,B as $,v as So}from"../../chunks/vendor-1e8b365d.js";import{T as zt}from"../../chunks/Tip-62b14c6e.js";import{Y as Lo}from"../../chunks/Youtube-c2a8cc39.js";import{I as Ba}from"../../chunks/IconCopyLink-483c28ba.js";import{C as z}from"../../chunks/CodeBlock-e5764662.js";import{D as Go}from"../../chunks/DocNotebookDropdown-37d928d3.js";function Ho(F){let p,I,h,q,P,f,D,C,w,j,y,A,k,M,E,O,V;return{c(){p=l("p"),I=a("\u270E Par d\xE9faut, \u{1F917} "),h=l("em"),q=a("Datasets"),P=a(" d\xE9compresse les fichiers n\xE9cessaires pour charger un jeu de donn\xE9es. Si vous souhaitez conserver de l\u2019espace sur le disque dur, vous pouvez passer "),f=l("code"),D=a("DownloadConfig(delete_extracted=True)"),C=a(" \xE0 l\u2019argument "),w=l("code"),j=a("download_config"),y=a(" de "),A=l("code"),k=a("load_dataset()"),M=a(". Voir la "),E=l("a"),O=a("documentation"),V=a(" pour plus de d\xE9tails."),this.h()},l(N){p=o(N,"P",{});var T=i(p);I=n(T,"\u270E Par d\xE9faut, \u{1F917} "),h=o(T,"EM",{});var J=i(h);q=n(J,"Datasets"),J.forEach(t),P=n(T," d\xE9compresse les fichiers n\xE9cessaires pour charger un jeu de donn\xE9es. Si vous souhaitez conserver de l\u2019espace sur le disque dur, vous pouvez passer "),f=o(T,"CODE",{});var De=i(f);D=n(De,"DownloadConfig(delete_extracted=True)"),De.forEach(t),C=n(T," \xE0 l\u2019argument "),w=o(T,"CODE",{});var L=i(w);j=n(L,"download_config"),L.forEach(t),y=n(T," de "),A=o(T,"CODE",{});var $s=i(A);k=n($s,"load_dataset()"),$s.forEach(t),M=n(T,". Voir la "),E=o(T,"A",{href:!0,rel:!0});var de=i(E);O=n(de,"documentation"),de.forEach(t),V=n(T," pour plus de d\xE9tails."),T.forEach(t),this.h()},h(){m(E,"href","https://huggingface.co/docs/datasets/package_reference/builder_classes.html?#datasets.utils.DownloadConfig"),m(E,"rel","nofollow")},m(N,T){u(N,p,T),s(p,I),s(p,h),s(h,q),s(p,P),s(p,f),s(f,D),s(p,C),s(p,w),s(w,j),s(p,y),s(p,A),s(A,k),s(p,M),s(p,E),s(E,O),s(p,V)},d(N){N&&t(p)}}}function Uo(F){let p,I,h,q,P,f,D,C,w,j,y,A,k,M;return{c(){p=l("p"),I=a("\u270F\uFE0F "),h=l("strong"),q=a("Essayez !"),P=a(" Choisissez l\u2019un des "),f=l("a"),D=a("sous-ensembles"),C=a(" de The Pile qui est plus grand que la RAM de votre ordinateur portable ou de bureau. Chargez le avec \u{1F917} "),w=l("em"),j=a("Datasets"),y=a(" et mesurez la quantit\xE9 de RAM utilis\xE9e. Notez que pour obtenir une mesure pr\xE9cise, vous devrez le faire dans un nouveau processus. Vous pouvez trouver les tailles d\xE9compress\xE9es de chaque sous-ensemble dans le tableau 1 du papier de "),A=l("a"),k=a("The Pile"),M=a("."),this.h()},l(E){p=o(E,"P",{});var O=i(p);I=n(O,"\u270F\uFE0F "),h=o(O,"STRONG",{});var V=i(h);q=n(V,"Essayez !"),V.forEach(t),P=n(O," Choisissez l\u2019un des "),f=o(O,"A",{href:!0,rel:!0});var N=i(f);D=n(N,"sous-ensembles"),N.forEach(t),C=n(O," de The Pile qui est plus grand que la RAM de votre ordinateur portable ou de bureau. Chargez le avec \u{1F917} "),w=o(O,"EM",{});var T=i(w);j=n(T,"Datasets"),T.forEach(t),y=n(O," et mesurez la quantit\xE9 de RAM utilis\xE9e. Notez que pour obtenir une mesure pr\xE9cise, vous devrez le faire dans un nouveau processus. Vous pouvez trouver les tailles d\xE9compress\xE9es de chaque sous-ensemble dans le tableau 1 du papier de "),A=o(O,"A",{href:!0,rel:!0});var J=i(A);k=n(J,"The Pile"),J.forEach(t),M=n(O,"."),O.forEach(t),this.h()},h(){m(f,"href","https://mystic.the-eye.eu/public/AI/pile_preliminary_components/"),m(f,"rel","nofollow"),m(A,"href","https://arxiv.org/abs/2101.00027"),m(A,"rel","nofollow")},m(E,O){u(E,p,O),s(p,I),s(p,h),s(h,q),s(p,P),s(p,f),s(f,D),s(p,C),s(p,w),s(w,j),s(p,y),s(p,A),s(A,k),s(p,M)},d(E){E&&t(p)}}}function Bo(F){let p,I,h,q,P,f,D,C,w;return{c(){p=l("p"),I=a("\u{1F4A1} Dans les "),h=l("em"),q=a("notebooks"),P=a(" Jupyter, vous pouvez \xE9galement chronom\xE9trer les cellules \xE0 l\u2019aide de la fonction magique "),f=l("a"),D=l("code"),C=a("%%timeit"),w=a("."),this.h()},l(j){p=o(j,"P",{});var y=i(p);I=n(y,"\u{1F4A1} Dans les "),h=o(y,"EM",{});var A=i(h);q=n(A,"notebooks"),A.forEach(t),P=n(y," Jupyter, vous pouvez \xE9galement chronom\xE9trer les cellules \xE0 l\u2019aide de la fonction magique "),f=o(y,"A",{href:!0,rel:!0});var k=i(f);D=o(k,"CODE",{});var M=i(D);C=n(M,"%%timeit"),M.forEach(t),k.forEach(t),w=n(y,"."),y.forEach(t),this.h()},h(){m(f,"href","https://ipython.readthedocs.io/en/stable/interactive/magics.html#magic-timeit"),m(f,"rel","nofollow")},m(j,y){u(j,p,y),s(p,I),s(p,h),s(h,q),s(p,P),s(p,f),s(f,D),s(D,C),s(p,w)},d(j){j&&t(p)}}}function Vo(F){let p,I,h,q,P,f,D,C;return{c(){p=l("p"),I=a("\u{1F4A1} Pour acc\xE9l\xE9rer la tokenisation avec le streaming, vous pouvez passer "),h=l("code"),q=a("batched=True"),P=a(", comme nous l\u2019avons vu dans la derni\xE8re section. Il traitera les exemples batch par batch. La taille de batch par d\xE9faut est de 1 000 et peut \xEAtre sp\xE9cifi\xE9e avec l\u2019argument "),f=l("code"),D=a("batch_size"),C=a(".")},l(w){p=o(w,"P",{});var j=i(p);I=n(j,"\u{1F4A1} Pour acc\xE9l\xE9rer la tokenisation avec le streaming, vous pouvez passer "),h=o(j,"CODE",{});var y=i(h);q=n(y,"batched=True"),y.forEach(t),P=n(j,", comme nous l\u2019avons vu dans la derni\xE8re section. Il traitera les exemples batch par batch. La taille de batch par d\xE9faut est de 1 000 et peut \xEAtre sp\xE9cifi\xE9e avec l\u2019argument "),f=o(j,"CODE",{});var A=i(f);D=n(A,"batch_size"),A.forEach(t),C=n(j,"."),j.forEach(t)},m(w,j){u(w,p,j),s(p,I),s(p,h),s(h,q),s(p,P),s(p,f),s(f,D),s(p,C)},d(w){w&&t(p)}}}function Fo(F){let p,I,h,q,P,f,D,C,w,j,y,A,k;return{c(){p=l("p"),I=a("\u270F\uFE0F "),h=l("strong"),q=a("Essayez !"),P=a(" Utilisez l\u2019un des grands corpus Common Crawl comme "),f=l("a"),D=l("code"),C=a("mc4"),w=a(" ou "),j=l("a"),y=l("code"),A=a("oscar"),k=a(" pour cr\xE9er en streaming un jeu de donn\xE9es multilingue repr\xE9sentant les proportions de langues parl\xE9es dans un pays de votre choix. Par exemple, les quatre langues nationales en Suisse sont l\u2019allemand, le fran\xE7ais, l\u2019italien et le romanche. Vous pouvez donc essayer de cr\xE9er un corpus suisse en \xE9chantillonnant les sous-ensembles Oscar en fonction de leur proportion parl\xE9e."),this.h()},l(M){p=o(M,"P",{});var E=i(p);I=n(E,"\u270F\uFE0F "),h=o(E,"STRONG",{});var O=i(h);q=n(O,"Essayez !"),O.forEach(t),P=n(E," Utilisez l\u2019un des grands corpus Common Crawl comme "),f=o(E,"A",{href:!0,rel:!0});var V=i(f);D=o(V,"CODE",{});var N=i(D);C=n(N,"mc4"),N.forEach(t),V.forEach(t),w=n(E," ou "),j=o(E,"A",{href:!0,rel:!0});var T=i(j);y=o(T,"CODE",{});var J=i(y);A=n(J,"oscar"),J.forEach(t),T.forEach(t),k=n(E," pour cr\xE9er en streaming un jeu de donn\xE9es multilingue repr\xE9sentant les proportions de langues parl\xE9es dans un pays de votre choix. Par exemple, les quatre langues nationales en Suisse sont l\u2019allemand, le fran\xE7ais, l\u2019italien et le romanche. Vous pouvez donc essayer de cr\xE9er un corpus suisse en \xE9chantillonnant les sous-ensembles Oscar en fonction de leur proportion parl\xE9e."),E.forEach(t),this.h()},h(){m(f,"href","https://huggingface.co/datasets/mc4"),m(f,"rel","nofollow"),m(j,"href","https://huggingface.co/datasets/oscar"),m(j,"rel","nofollow")},m(M,E){u(M,p,E),s(p,I),s(p,h),s(h,q),s(p,P),s(p,f),s(f,D),s(D,C),s(p,w),s(p,j),s(j,y),s(y,A),s(p,k)},d(M){M&&t(p)}}}function Jo(F){let p,I,h,q,P,f,D,C,w,j,y,A,k,M,E,O,V,N,T,J,De,L,$s,de,Va,Fa,Os,Ja,Wa,Ms,Ka,Ya,Dt,Pe,Pt,X,Za,Rs,Qa,Xa,Ce,en,sn,Ct,oe,ce,Ns,ke,tn,Ss,an,kt,R,nn,Ie,rn,ln,Te,on,un,Oe,pn,dn,Me,cn,mn,Re,fn,hn,Ls,gn,vn,It,Ne,Tt,me,xn,js,bn,_n,Ot,Se,Mt,Le,Rt,ys,$n,Nt,fe,St,Es,jn,Lt,Ge,Gt,He,Ht,ws,yn,Ut,ie,he,Gs,Ue,En,Hs,wn,Bt,ee,qn,Be,Us,An,zn,Bs,Dn,Pn,Vt,Ve,Ft,ge,Cn,Vs,kn,In,Jt,Fe,Wt,Je,Kt,W,Tn,Fs,On,Mn,Js,Rn,Nn,Ws,Sn,Ln,Yt,We,Zt,Ke,Qt,qs,Gn,Xt,ve,ea,G,Hn,Ye,Un,Bn,Ks,Vn,Fn,Ys,Jn,Wn,Ze,Kn,Yn,sa,S,Zn,Zs,Qn,Xn,Qe,er,sr,Qs,tr,ar,Xe,nr,rr,es,lr,or,ta,ss,aa,ts,na,K,ir,Xs,ur,pr,et,dr,cr,st,mr,fr,ra,xe,la,ue,be,tt,as,hr,at,gr,oa,se,vr,nt,xr,br,rt,_r,$r,ia,ns,ua,H,jr,lt,yr,Er,ot,wr,qr,it,Ar,zr,ut,Dr,Pr,pa,rs,da,ls,ca,te,Cr,pt,kr,Ir,As,Tr,Or,ma,os,fa,is,ha,_e,ga,Y,Mr,dt,Rr,Nr,ct,Sr,Lr,mt,Gr,Hr,va,us,xa,ps,ba,Z,Ur,ft,Br,Vr,ht,Fr,Jr,gt,Wr,Kr,_a,ds,$a,cs,ja,$e,Yr,vt,Zr,Qr,ya,ms,Ea,U,Xr,xt,el,sl,bt,tl,al,_t,nl,rl,$t,ll,ol,wa,fs,qa,hs,Aa,je,il,jt,ul,pl,za,gs,Da,vs,Pa,ae,dl,yt,cl,ml,Et,fl,hl,Ca,zs,gl,ka,xs,Ia,bs,Ta,ye,Oa,Ds,vl,Ma;return f=new Ba({}),y=new Go({props:{classNames:"absolute z-10 right-0 top-0",options:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/chapter5/section4.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/chapter5/section4.ipynb"}]}}),Pe=new Lo({props:{id:"JwISwTCPPWo"}}),ke=new Ba({}),Ne=new z({props:{code:"!pip install zstandard",highlighted:"!pip install zstandard"}}),Se=new z({props:{code:`from datasets import load_dataset

# Cela prend quelques minutes \xE0 ex\xE9cuter, alors allez prendre un th\xE9 ou un caf\xE9 en attendant :)
data_files = "https://mystic.the-eye.eu/public/AI/pile_preliminary_components/PUBMED_title_abstracts_2019_baseline.jsonl.zst"
pubmed_dataset = load_dataset("json", data_files=data_files, split="train")
pubmed_dataset`,highlighted:`<span class="hljs-keyword">from</span> datasets <span class="hljs-keyword">import</span> load_dataset

<span class="hljs-comment"># Cela prend quelques minutes \xE0 ex\xE9cuter, alors allez prendre un th\xE9 ou un caf\xE9 en attendant :)</span>
data_files = <span class="hljs-string">&quot;https://mystic.the-eye.eu/public/AI/pile_preliminary_components/PUBMED_title_abstracts_2019_baseline.jsonl.zst&quot;</span>
pubmed_dataset = load_dataset(<span class="hljs-string">&quot;json&quot;</span>, data_files=data_files, split=<span class="hljs-string">&quot;train&quot;</span>)
pubmed_dataset`}}),Le=new z({props:{code:`Dataset({
    features: ['meta', 'text'],
    num_rows: 15518009
})`,highlighted:`Dataset({
    features: [<span class="hljs-string">&#x27;meta&#x27;</span>, <span class="hljs-string">&#x27;text&#x27;</span>],
    num_rows: <span class="hljs-number">15518009</span>
})`}}),fe=new zt({props:{$$slots:{default:[Ho]},$$scope:{ctx:F}}}),Ge=new z({props:{code:"pubmed_dataset[0]",highlighted:'pubmed_dataset[<span class="hljs-number">0</span>]'}}),He=new z({props:{code:`{'meta': {'pmid': 11409574, 'language': 'eng'},
 'text': 'Epidemiology of hypoxaemia in children with acute lower respiratory infection.\\nTo determine the prevalence of hypoxaemia in children aged under 5 years suffering acute lower respiratory infections (ALRI), the risk factors for hypoxaemia in children under 5 years of age with ALRI, and the association of hypoxaemia with an increased risk of dying in children of the same age ...'
# \xC9pid\xE9miologie de l'hypox\xE9mie chez les enfants souffrant d'une infection aigu\xEB des voies respiratoires inf\xE9rieures. D\xE9terminer la pr\xE9valence de l'hypox\xE9mie chez les enfants de moins de 5 ans souffrant d'une infection aigu\xEB des voies respiratoires inf\xE9rieures (IAVI), les facteurs de risque de l'hypox\xE9mie chez les enfants de moins de 5 ans souffrant d'une IAVI, et l'association de l'hypox\xE9mie \xE0 un risque accru de d\xE9c\xE8s chez les enfants du m\xEAme \xE2ge ...
}`,highlighted:`{<span class="hljs-string">&#x27;meta&#x27;</span>: {<span class="hljs-string">&#x27;pmid&#x27;</span>: <span class="hljs-number">11409574</span>, <span class="hljs-string">&#x27;language&#x27;</span>: <span class="hljs-string">&#x27;eng&#x27;</span>},
 <span class="hljs-string">&#x27;text&#x27;</span>: <span class="hljs-string">&#x27;Epidemiology of hypoxaemia in children with acute lower respiratory infection.\\nTo determine the prevalence of hypoxaemia in children aged under 5 years suffering acute lower respiratory infections (ALRI), the risk factors for hypoxaemia in children under 5 years of age with ALRI, and the association of hypoxaemia with an increased risk of dying in children of the same age ...&#x27;</span>
<span class="hljs-comment"># \xC9pid\xE9miologie de l&#x27;hypox\xE9mie chez les enfants souffrant d&#x27;une infection aigu\xEB des voies respiratoires inf\xE9rieures. D\xE9terminer la pr\xE9valence de l&#x27;hypox\xE9mie chez les enfants de moins de 5 ans souffrant d&#x27;une infection aigu\xEB des voies respiratoires inf\xE9rieures (IAVI), les facteurs de risque de l&#x27;hypox\xE9mie chez les enfants de moins de 5 ans souffrant d&#x27;une IAVI, et l&#x27;association de l&#x27;hypox\xE9mie \xE0 un risque accru de d\xE9c\xE8s chez les enfants du m\xEAme \xE2ge ...</span>
}`}}),Ue=new Ba({}),Ve=new z({props:{code:"!pip install psutil",highlighted:"!pip install psutil"}}),Fe=new z({props:{code:`import psutil

# Process.memory_info est exprim\xE9 en octets, donc convertir en m\xE9gaoctets
print(f"RAM used: {psutil.Process().memory_info().rss / (1024 * 1024):.2f} MB")`,highlighted:`<span class="hljs-keyword">import</span> psutil

<span class="hljs-comment"># Process.memory_info est exprim\xE9 en octets, donc convertir en m\xE9gaoctets</span>
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;RAM used: <span class="hljs-subst">{psutil.Process().memory_info().rss / (<span class="hljs-number">1024</span> * <span class="hljs-number">1024</span>):<span class="hljs-number">.2</span>f}</span> MB&quot;</span>)`}}),Je=new z({props:{code:"RAM used: 5678.33 MB",highlighted:'RAM used: <span class="hljs-number">5678.33</span> MB'}}),We=new z({props:{code:`print(f"Number of files in dataset : {pubmed_dataset.dataset_size}")
size_gb = pubmed_dataset.dataset_size / (1024**3)
print(f"Dataset size (cache file) : {size_gb:.2f} GB")`,highlighted:`<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Number of files in dataset : <span class="hljs-subst">{pubmed_dataset.dataset_size}</span>&quot;</span>)
size_gb = pubmed_dataset.dataset_size / (<span class="hljs-number">1024</span>**<span class="hljs-number">3</span>)
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Dataset size (cache file) : <span class="hljs-subst">{size_gb:<span class="hljs-number">.2</span>f}</span> GB&quot;</span>)`}}),Ke=new z({props:{code:`Number of files in dataset : 20979437051
Dataset size (cache file) : 19.54 GB`,highlighted:`Number of files <span class="hljs-keyword">in</span> dataset : <span class="hljs-number">20979437051</span>
Dataset size (cache file) : <span class="hljs-number">19.54</span> GB`}}),ve=new zt({props:{$$slots:{default:[Uo]},$$scope:{ctx:F}}}),ss=new z({props:{code:`import timeit

code_snippet = """batch_size = 1000

for idx in range(0, len(pubmed_dataset), batch_size):
    _ = pubmed_dataset[idx:idx + batch_size]
"""

time = timeit.timeit(stmt=code_snippet, number=1, globals=globals())
print(
    f"Iterated over {len(pubmed_dataset)} examples (about {size_gb:.1f} GB) in "
    f"{time:.1f}s, i.e. {size_gb/time:.3f} GB/s"
)`,highlighted:`<span class="hljs-keyword">import</span> timeit

code_snippet = <span class="hljs-string">&quot;&quot;&quot;batch_size = 1000

for idx in range(0, len(pubmed_dataset), batch_size):
    _ = pubmed_dataset[idx:idx + batch_size]
&quot;&quot;&quot;</span>

time = timeit.timeit(stmt=code_snippet, number=<span class="hljs-number">1</span>, <span class="hljs-built_in">globals</span>=<span class="hljs-built_in">globals</span>())
<span class="hljs-built_in">print</span>(
    <span class="hljs-string">f&quot;Iterated over <span class="hljs-subst">{<span class="hljs-built_in">len</span>(pubmed_dataset)}</span> examples (about <span class="hljs-subst">{size_gb:<span class="hljs-number">.1</span>f}</span> GB) in &quot;</span>
    <span class="hljs-string">f&quot;<span class="hljs-subst">{time:<span class="hljs-number">.1</span>f}</span>s, i.e. <span class="hljs-subst">{size_gb/time:<span class="hljs-number">.3</span>f}</span> GB/s&quot;</span>
)`}}),ts=new z({props:{code:"'Iterated over 15518009 examples (about 19.5 GB) in 64.2s, i.e. 0.304 GB/s'",highlighted:'<span class="hljs-string">&#x27;Iterated over 15518009 examples (about 19.5 GB) in 64.2s, i.e. 0.304 GB/s&#x27;</span>'}}),xe=new zt({props:{$$slots:{default:[Bo]},$$scope:{ctx:F}}}),as=new Ba({}),ns=new z({props:{code:`pubmed_dataset_streamed = load_dataset(
    "json", data_files=data_files, split="train", streaming=True
)`,highlighted:`pubmed_dataset_streamed = load_dataset(
    <span class="hljs-string">&quot;json&quot;</span>, data_files=data_files, split=<span class="hljs-string">&quot;train&quot;</span>, streaming=<span class="hljs-literal">True</span>
)`}}),rs=new z({props:{code:"next(iter(pubmed_dataset_streamed))",highlighted:'<span class="hljs-built_in">next</span>(<span class="hljs-built_in">iter</span>(pubmed_dataset_streamed))'}}),ls=new z({props:{code:`{'meta': {'pmid': 11409574, 'language': 'eng'},
 'text': 'Epidemiology of hypoxaemia in children with acute lower respiratory infection.\\nTo determine the prevalence of hypoxaemia in children aged under 5 years suffering acute lower respiratory infections (ALRI), the risk factors for hypoxaemia in children under 5 years of age with ALRI, and the association of hypoxaemia with an increased risk of dying in children of the same age ...'}`,highlighted:`{<span class="hljs-string">&#x27;meta&#x27;</span>: {<span class="hljs-string">&#x27;pmid&#x27;</span>: <span class="hljs-number">11409574</span>, <span class="hljs-string">&#x27;language&#x27;</span>: <span class="hljs-string">&#x27;eng&#x27;</span>},
 <span class="hljs-string">&#x27;text&#x27;</span>: <span class="hljs-string">&#x27;Epidemiology of hypoxaemia in children with acute lower respiratory infection.\\nTo determine the prevalence of hypoxaemia in children aged under 5 years suffering acute lower respiratory infections (ALRI), the risk factors for hypoxaemia in children under 5 years of age with ALRI, and the association of hypoxaemia with an increased risk of dying in children of the same age ...&#x27;</span>}`}}),os=new z({props:{code:`from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("distilbert-base-uncased")
tokenized_dataset = pubmed_dataset_streamed.map(lambda x: tokenizer(x["text"]))
next(iter(tokenized_dataset))`,highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained(<span class="hljs-string">&quot;distilbert-base-uncased&quot;</span>)
tokenized_dataset = pubmed_dataset_streamed.<span class="hljs-built_in">map</span>(<span class="hljs-keyword">lambda</span> x: tokenizer(x[<span class="hljs-string">&quot;text&quot;</span>]))
<span class="hljs-built_in">next</span>(<span class="hljs-built_in">iter</span>(tokenized_dataset))`}}),is=new z({props:{code:"{'input_ids': [101, 4958, 5178, 4328, 6779, ...], 'attention_mask': [1, 1, 1, 1, 1, ...]}",highlighted:'{<span class="hljs-string">&#x27;input_ids&#x27;</span>: [<span class="hljs-number">101</span>, <span class="hljs-number">4958</span>, <span class="hljs-number">5178</span>, <span class="hljs-number">4328</span>, <span class="hljs-number">6779</span>, ...], <span class="hljs-string">&#x27;attention_mask&#x27;</span>: [<span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, ...]}'}}),_e=new zt({props:{$$slots:{default:[Vo]},$$scope:{ctx:F}}}),us=new z({props:{code:`shuffled_dataset = pubmed_dataset_streamed.shuffle(buffer_size=10_000, seed=42)
next(iter(shuffled_dataset))`,highlighted:`shuffled_dataset = pubmed_dataset_streamed.shuffle(buffer_size=<span class="hljs-number">10_000</span>, seed=<span class="hljs-number">42</span>)
<span class="hljs-built_in">next</span>(<span class="hljs-built_in">iter</span>(shuffled_dataset))`}}),ps=new z({props:{code:`{'meta': {'pmid': 11410799, 'language': 'eng'},
 'text': 'Randomized study of dose or schedule modification of granulocyte colony-stimulating factor in platinum-based chemotherapy for elderly patients with lung cancer ...'
# \xC9tude randomis\xE9e sur la modification de la dose ou du calendrier d'administration du facteur de stimulation des colonies de granulocytes dans le cadre d'une chimioth\xE9rapie \xE0 base de platine chez les patients \xE2g\xE9s atteints de cancer du poumon ...
}`,highlighted:`{<span class="hljs-string">&#x27;meta&#x27;</span>: {<span class="hljs-string">&#x27;pmid&#x27;</span>: <span class="hljs-number">11410799</span>, <span class="hljs-string">&#x27;language&#x27;</span>: <span class="hljs-string">&#x27;eng&#x27;</span>},
 <span class="hljs-string">&#x27;text&#x27;</span>: <span class="hljs-string">&#x27;Randomized study of dose or schedule modification of granulocyte colony-stimulating factor in platinum-based chemotherapy for elderly patients with lung cancer ...&#x27;</span>
<span class="hljs-comment"># \xC9tude randomis\xE9e sur la modification de la dose ou du calendrier d&#x27;administration du facteur de stimulation des colonies de granulocytes dans le cadre d&#x27;une chimioth\xE9rapie \xE0 base de platine chez les patients \xE2g\xE9s atteints de cancer du poumon ...</span>
}`}}),ds=new z({props:{code:`dataset_head = pubmed_dataset_streamed.take(5)
list(dataset_head)`,highlighted:`dataset_head = pubmed_dataset_streamed.take(<span class="hljs-number">5</span>)
<span class="hljs-built_in">list</span>(dataset_head)`}}),cs=new z({props:{code:`[{'meta': {'pmid': 11409574, 'language': 'eng'},
  'text': 'Epidemiology of hypoxaemia in children with acute lower respiratory infection ...'
# \xC9pid\xE9miologie de l'hypox\xE9mie chez les enfants atteints d'une infection aigu\xEB des voies respiratoires inf\xE9rieures ...},
 {'meta': {'pmid': 11409575, 'language': 'eng'},
  'text': 'Clinical signs of hypoxaemia in children with acute lower respiratory infection: indicators of oxygen therapy ...'
# Signes cliniques d'hypox\xE9mie chez les enfants atteints d'une infection aigu\xEB des voies respiratoires inf\xE9rieures : indicateurs de l'oxyg\xE9noth\xE9rapie ...},
 {'meta': {'pmid': 11409576, 'language': 'eng'},
  'text': "Hypoxaemia in children with severe pneumonia in Papua New Guinea ..."
# Hypox\xE9mie chez les enfants atteints de pneumonie grave en Papouasie-Nouvelle-Guin\xE9e ...},
 {'meta': {'pmid': 11409577, 'language': 'eng'},
  'text': 'Oxygen concentrators and cylinders ...'
# Concentrateurs et bouteilles d'oxyg\xE8ne...},
 {'meta': {'pmid': 11409578, 'language': 'eng'},
  'text': 'Oxygen supply in rural africa: a personal experience ...'
# L'approvisionnement en oxyg\xE8ne dans les zones rurales africaines : une exp\xE9rience personnelle ...}]`,highlighted:`[{<span class="hljs-string">&#x27;meta&#x27;</span>: {<span class="hljs-string">&#x27;pmid&#x27;</span>: <span class="hljs-number">11409574</span>, <span class="hljs-string">&#x27;language&#x27;</span>: <span class="hljs-string">&#x27;eng&#x27;</span>},
  <span class="hljs-string">&#x27;text&#x27;</span>: <span class="hljs-string">&#x27;Epidemiology of hypoxaemia in children with acute lower respiratory infection ...&#x27;</span>
<span class="hljs-comment"># \xC9pid\xE9miologie de l&#x27;hypox\xE9mie chez les enfants atteints d&#x27;une infection aigu\xEB des voies respiratoires inf\xE9rieures ...},</span>
 {<span class="hljs-string">&#x27;meta&#x27;</span>: {<span class="hljs-string">&#x27;pmid&#x27;</span>: <span class="hljs-number">11409575</span>, <span class="hljs-string">&#x27;language&#x27;</span>: <span class="hljs-string">&#x27;eng&#x27;</span>},
  <span class="hljs-string">&#x27;text&#x27;</span>: <span class="hljs-string">&#x27;Clinical signs of hypoxaemia in children with acute lower respiratory infection: indicators of oxygen therapy ...&#x27;</span>
<span class="hljs-comment"># Signes cliniques d&#x27;hypox\xE9mie chez les enfants atteints d&#x27;une infection aigu\xEB des voies respiratoires inf\xE9rieures : indicateurs de l&#x27;oxyg\xE9noth\xE9rapie ...},</span>
 {<span class="hljs-string">&#x27;meta&#x27;</span>: {<span class="hljs-string">&#x27;pmid&#x27;</span>: <span class="hljs-number">11409576</span>, <span class="hljs-string">&#x27;language&#x27;</span>: <span class="hljs-string">&#x27;eng&#x27;</span>},
  <span class="hljs-string">&#x27;text&#x27;</span>: <span class="hljs-string">&quot;Hypoxaemia in children with severe pneumonia in Papua New Guinea ...&quot;</span>
<span class="hljs-comment"># Hypox\xE9mie chez les enfants atteints de pneumonie grave en Papouasie-Nouvelle-Guin\xE9e ...},</span>
 {<span class="hljs-string">&#x27;meta&#x27;</span>: {<span class="hljs-string">&#x27;pmid&#x27;</span>: <span class="hljs-number">11409577</span>, <span class="hljs-string">&#x27;language&#x27;</span>: <span class="hljs-string">&#x27;eng&#x27;</span>},
  <span class="hljs-string">&#x27;text&#x27;</span>: <span class="hljs-string">&#x27;Oxygen concentrators and cylinders ...&#x27;</span>
<span class="hljs-comment"># Concentrateurs et bouteilles d&#x27;oxyg\xE8ne...},</span>
 {<span class="hljs-string">&#x27;meta&#x27;</span>: {<span class="hljs-string">&#x27;pmid&#x27;</span>: <span class="hljs-number">11409578</span>, <span class="hljs-string">&#x27;language&#x27;</span>: <span class="hljs-string">&#x27;eng&#x27;</span>},
  <span class="hljs-string">&#x27;text&#x27;</span>: <span class="hljs-string">&#x27;Oxygen supply in rural africa: a personal experience ...&#x27;</span>
<span class="hljs-comment"># L&#x27;approvisionnement en oxyg\xE8ne dans les zones rurales africaines : une exp\xE9rience personnelle ...}]</span>`}}),ms=new z({props:{code:`# Ignorer les 1 000 premiers exemples et inclure le reste dans l'ensemble d'apprentissage.
train_dataset = shuffled_dataset.skip(1000)
# Prendre les 1 000 premiers exemples pour l'ensemble de validation.
validation_dataset = shuffled_dataset.take(1000)`,highlighted:`<span class="hljs-comment"># Ignorer les 1 000 premiers exemples et inclure le reste dans l&#x27;ensemble d&#x27;apprentissage.</span>
train_dataset = shuffled_dataset.skip(<span class="hljs-number">1000</span>)
<span class="hljs-comment"># Prendre les 1 000 premiers exemples pour l&#x27;ensemble de validation.</span>
validation_dataset = shuffled_dataset.take(<span class="hljs-number">1000</span>)`}}),fs=new z({props:{code:`law_dataset_streamed = load_dataset(
    "json",
    data_files="https://mystic.the-eye.eu/public/AI/pile_preliminary_components/FreeLaw_Opinions.jsonl.zst",
    split="train",
    streaming=True,
)
next(iter(law_dataset_streamed))`,highlighted:`law_dataset_streamed = load_dataset(
    <span class="hljs-string">&quot;json&quot;</span>,
    data_files=<span class="hljs-string">&quot;https://mystic.the-eye.eu/public/AI/pile_preliminary_components/FreeLaw_Opinions.jsonl.zst&quot;</span>,
    split=<span class="hljs-string">&quot;train&quot;</span>,
    streaming=<span class="hljs-literal">True</span>,
)
<span class="hljs-built_in">next</span>(<span class="hljs-built_in">iter</span>(law_dataset_streamed))`}}),hs=new z({props:{code:`{'meta': {'case_ID': '110921.json',
  'case_jurisdiction': 'scotus.tar.gz',
  'date_created': '2010-04-28T17:12:49Z'},
 'text': '\\n461 U.S. 238 (1983)\\nOLIM ET AL.\\nv.\\nWAKINEKONA\\nNo. 81-1581.\\nSupreme Court of United States.\\nArgued January 19, 1983.\\nDecided April 26, 1983.\\nCERTIORARI TO THE UNITED STATES COURT OF APPEALS FOR THE NINTH CIRCUIT\\n*239 Michael A. Lilly, First Deputy Attorney General of Hawaii, argued the cause for petitioners. With him on the brief was James H. Dannenberg, Deputy Attorney General...'}`,highlighted:`{<span class="hljs-string">&#x27;meta&#x27;</span>: {<span class="hljs-string">&#x27;case_ID&#x27;</span>: <span class="hljs-string">&#x27;110921.json&#x27;</span>,
  <span class="hljs-string">&#x27;case_jurisdiction&#x27;</span>: <span class="hljs-string">&#x27;scotus.tar.gz&#x27;</span>,
  <span class="hljs-string">&#x27;date_created&#x27;</span>: <span class="hljs-string">&#x27;2010-04-28T17:12:49Z&#x27;</span>},
 <span class="hljs-string">&#x27;text&#x27;</span>: <span class="hljs-string">&#x27;\\n461 U.S. 238 (1983)\\nOLIM ET AL.\\nv.\\nWAKINEKONA\\nNo. 81-1581.\\nSupreme Court of United States.\\nArgued January 19, 1983.\\nDecided April 26, 1983.\\nCERTIORARI TO THE UNITED STATES COURT OF APPEALS FOR THE NINTH CIRCUIT\\n*239 Michael A. Lilly, First Deputy Attorney General of Hawaii, argued the cause for petitioners. With him on the brief was James H. Dannenberg, Deputy Attorney General...&#x27;</span>}`}}),gs=new z({props:{code:`from itertools import islice
from datasets import interleave_datasets

combined_dataset = interleave_datasets([pubmed_dataset_streamed, law_dataset_streamed])
list(islice(combined_dataset, 2))`,highlighted:`<span class="hljs-keyword">from</span> itertools <span class="hljs-keyword">import</span> islice
<span class="hljs-keyword">from</span> datasets <span class="hljs-keyword">import</span> interleave_datasets

combined_dataset = interleave_datasets([pubmed_dataset_streamed, law_dataset_streamed])
<span class="hljs-built_in">list</span>(islice(combined_dataset, <span class="hljs-number">2</span>))`}}),vs=new z({props:{code:`[{'meta': {'pmid': 11409574, 'language': 'eng'},
  'text': 'Epidemiology of hypoxaemia in children with acute lower respiratory infection ...'},
 {'meta': {'case_ID': '110921.json',
   'case_jurisdiction': 'scotus.tar.gz',
   'date_created': '2010-04-28T17:12:49Z'},
  'text': '\\n461 U.S. 238 (1983)\\nOLIM ET AL.\\nv.\\nWAKINEKONA\\nNo. 81-1581.\\nSupreme Court of United States.\\nArgued January 19, 1983.\\nDecided April 26, 1983.\\nCERTIORARI TO THE UNITED STATES COURT OF APPEALS FOR THE NINTH CIRCUIT\\n*239 Michael A. Lilly, First Deputy Attorney General of Hawaii, argued the cause for petitioners. With him on the brief was James H. Dannenberg, Deputy Attorney General...'}]`,highlighted:`[{<span class="hljs-string">&#x27;meta&#x27;</span>: {<span class="hljs-string">&#x27;pmid&#x27;</span>: <span class="hljs-number">11409574</span>, <span class="hljs-string">&#x27;language&#x27;</span>: <span class="hljs-string">&#x27;eng&#x27;</span>},
  <span class="hljs-string">&#x27;text&#x27;</span>: <span class="hljs-string">&#x27;Epidemiology of hypoxaemia in children with acute lower respiratory infection ...&#x27;</span>},
 {<span class="hljs-string">&#x27;meta&#x27;</span>: {<span class="hljs-string">&#x27;case_ID&#x27;</span>: <span class="hljs-string">&#x27;110921.json&#x27;</span>,
   <span class="hljs-string">&#x27;case_jurisdiction&#x27;</span>: <span class="hljs-string">&#x27;scotus.tar.gz&#x27;</span>,
   <span class="hljs-string">&#x27;date_created&#x27;</span>: <span class="hljs-string">&#x27;2010-04-28T17:12:49Z&#x27;</span>},
  <span class="hljs-string">&#x27;text&#x27;</span>: <span class="hljs-string">&#x27;\\n461 U.S. 238 (1983)\\nOLIM ET AL.\\nv.\\nWAKINEKONA\\nNo. 81-1581.\\nSupreme Court of United States.\\nArgued January 19, 1983.\\nDecided April 26, 1983.\\nCERTIORARI TO THE UNITED STATES COURT OF APPEALS FOR THE NINTH CIRCUIT\\n*239 Michael A. Lilly, First Deputy Attorney General of Hawaii, argued the cause for petitioners. With him on the brief was James H. Dannenberg, Deputy Attorney General...&#x27;</span>}]`}}),xs=new z({props:{code:`base_url = "https://mystic.the-eye.eu/public/AI/pile/"
data_files = {
    "train": [base_url + "train/" + f"{idx:02d}.jsonl.zst" for idx in range(30)],
    "validation": base_url + "val.jsonl.zst",
    "test": base_url + "test.jsonl.zst",
}
pile_dataset = load_dataset("json", data_files=data_files, streaming=True)
next(iter(pile_dataset["train"]))`,highlighted:`base_url = <span class="hljs-string">&quot;https://mystic.the-eye.eu/public/AI/pile/&quot;</span>
data_files = {
    <span class="hljs-string">&quot;train&quot;</span>: [base_url + <span class="hljs-string">&quot;train/&quot;</span> + <span class="hljs-string">f&quot;<span class="hljs-subst">{idx:02d}</span>.jsonl.zst&quot;</span> <span class="hljs-keyword">for</span> idx <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(<span class="hljs-number">30</span>)],
    <span class="hljs-string">&quot;validation&quot;</span>: base_url + <span class="hljs-string">&quot;val.jsonl.zst&quot;</span>,
    <span class="hljs-string">&quot;test&quot;</span>: base_url + <span class="hljs-string">&quot;test.jsonl.zst&quot;</span>,
}
pile_dataset = load_dataset(<span class="hljs-string">&quot;json&quot;</span>, data_files=data_files, streaming=<span class="hljs-literal">True</span>)
<span class="hljs-built_in">next</span>(<span class="hljs-built_in">iter</span>(pile_dataset[<span class="hljs-string">&quot;train&quot;</span>]))`}}),bs=new z({props:{code:`{'meta': {'pile_set_name': 'Pile-CC'},
 'text': 'It is done, and submitted. You can play \u201CSurvival of the Tastiest\u201D on Android, and on the web...'}`,highlighted:`{<span class="hljs-string">&#x27;meta&#x27;</span>: {<span class="hljs-string">&#x27;pile_set_name&#x27;</span>: <span class="hljs-string">&#x27;Pile-CC&#x27;</span>},
 <span class="hljs-string">&#x27;text&#x27;</span>: <span class="hljs-string">&#x27;It is done, and submitted. You can play \u201CSurvival of the Tastiest\u201D on Android, and on the web...&#x27;</span>}`}}),ye=new zt({props:{$$slots:{default:[Fo]},$$scope:{ctx:F}}}),{c(){p=l("meta"),I=d(),h=l("h1"),q=l("a"),P=l("span"),g(f.$$.fragment),D=d(),C=l("span"),w=a("Donn\xE9es massives ? \u{1F917} *Datasets* \xE0 la rescousse !"),j=d(),g(y.$$.fragment),A=d(),k=l("p"),M=a("De nos jours, il n\u2019est pas rare de travailler avec des jeux de donn\xE9es de plusieurs gigaoctets surtout si vous envisagez de pr\xE9-entra\xEEner un "),E=l("em"),O=a("transformer"),V=a(" comme BERT ou GPT-2 \xE0 partir de z\xE9ro. Dans ces cas, m\xEAme "),N=l("em"),T=a("charger"),J=a(" les donn\xE9es peut \xEAtre un d\xE9fi. Par exemple, le corpus WebText utilis\xE9 pour pr\xE9-entra\xEEner GPT-2 se compose de plus de 8 millions de documents et de 40 Go de texte. Le charger dans la RAM de votre ordinateur portable est susceptible de lui donner une crise cardiaque !"),De=d(),L=l("p"),$s=a("Heureusement, \u{1F917} "),de=l("em"),Va=a("Datasets"),Fa=a(" a \xE9t\xE9 con\xE7u pour surmonter ces limitations. Il vous lib\xE8re des probl\xE8mes de gestion de la m\xE9moire en traitant les jeux de donn\xE9es comme des fichiers "),Os=l("em"),Ja=a("mapp\xE9s en m\xE9moire"),Wa=a(", ainsi que des limites du disque dur en faisant du "),Ms=l("em"),Ka=a("streaming"),Ya=a(" sur les entr\xE9es dans un corpus."),Dt=d(),g(Pe.$$.fragment),Pt=d(),X=l("p"),Za=a("Dans cette section, nous allons explorer ces fonctionnalit\xE9s de \u{1F917} "),Rs=l("em"),Qa=a("Datasets"),Xa=a(" avec un \xE9norme corpus de 825 Go connu sous le nom de "),Ce=l("a"),en=a("The Pile"),sn=a(". Commen\xE7ons !"),Ct=d(),oe=l("h2"),ce=l("a"),Ns=l("span"),g(ke.$$.fragment),tn=d(),Ss=l("span"),an=a("Qu'est-ce que *The Pile* ?"),kt=d(),R=l("p"),nn=a("The Pile est un corpus de texte en anglais cr\xE9\xE9 par "),Ie=l("a"),rn=a("EleutherAI"),ln=a(" pour entra\xEEner des mod\xE8les de langage \xE0 grande \xE9chelle. Il comprend une gamme vari\xE9e de jeux de donn\xE9es, couvrant des articles scientifiques, des r\xE9f\xE9rentiels de code GitHub et du texte Web filtr\xE9. Le corpus d\u2019entra\xEEnement est disponible en "),Te=l("a"),on=a("morceaux de 14 Go"),un=a(" et vous pouvez aussi t\xE9l\xE9charger plusieurs des "),Oe=l("a"),pn=a("composants individuels"),dn=a(". Commen\xE7ons par jeter un coup d\u2019\u0153il au jeu de donn\xE9es PubMed Abstracts, qui est un corpus de r\xE9sum\xE9s de 15 millions de publications biom\xE9dicales sur "),Me=l("a"),cn=a("PubMed"),mn=a(". Le jeu de donn\xE9es est au "),Re=l("a"),fn=a("format JSON Lines"),hn=a(" et est compress\xE9 \xE0 l\u2019aide de la biblioth\xE8que "),Ls=l("code"),gn=a("zstandard"),vn=a(". Nous devons donc d\u2019abord installer cette biblioth\xE8que :"),It=d(),g(Ne.$$.fragment),Tt=d(),me=l("p"),xn=a("Ensuite, nous pouvons charger le jeu de donn\xE9es en utilisant la m\xE9thode pour les fichiers distants que nous avons apprise dans "),js=l("a"),bn=a("section 2"),_n=a(" :"),Ot=d(),g(Se.$$.fragment),Mt=d(),g(Le.$$.fragment),Rt=d(),ys=l("p"),$n=a("Nous pouvons voir qu\u2019il y a 15 518 009 lignes et 2 colonnes dans notre jeu de donn\xE9es. C\u2019est beaucoup !"),Nt=d(),g(fe.$$.fragment),St=d(),Es=l("p"),jn=a("Inspectons le contenu du premier exemple :"),Lt=d(),g(Ge.$$.fragment),Gt=d(),g(He.$$.fragment),Ht=d(),ws=l("p"),yn=a("Cela ressemble au r\xE9sum\xE9 d\u2019un article m\xE9dical. Voyons maintenant combien de RAM nous avons utilis\xE9 pour charger le jeu de donn\xE9es !"),Ut=d(),ie=l("h2"),he=l("a"),Gs=l("span"),g(Ue.$$.fragment),En=d(),Hs=l("span"),wn=a("La magie du *memory mapping*"),Bt=d(),ee=l("p"),qn=a("Un moyen simple de mesurer l\u2019utilisation de la m\xE9moire dans Python consiste \xE0 utiliser la biblioth\xE8que "),Be=l("a"),Us=l("code"),An=a("psutil"),zn=a(" qui peut \xEAtre install\xE9e avec "),Bs=l("code"),Dn=a("pip"),Pn=a(" comme suit :"),Vt=d(),g(Ve.$$.fragment),Ft=d(),ge=l("p"),Cn=a("Elle fournit une classe "),Vs=l("code"),kn=a("Process"),In=a(" qui permet de v\xE9rifier l\u2019utilisation de la m\xE9moire du processus en cours :"),Jt=d(),g(Fe.$$.fragment),Wt=d(),g(Je.$$.fragment),Kt=d(),W=l("p"),Tn=a("Ici, l\u2019attribut "),Fs=l("code"),On=a("rss"),Mn=a(" fait r\xE9f\xE9rence \xE0 la "),Js=l("em"),Rn=a("taille de l\u2019ensemble r\xE9sident"),Nn=a(", qui est la fraction de m\xE9moire qu\u2019un processus occupe dans la RAM. Cette mesure inclut \xE9galement la m\xE9moire utilis\xE9e par l\u2019interpr\xE9teur Python et les biblioth\xE8ques que nous avons charg\xE9es, de sorte que la quantit\xE9 r\xE9elle de m\xE9moire utilis\xE9e pour charger le jeu de donn\xE9es est un peu plus petite. \xC0 titre de comparaison, voyons la taille du jeu de donn\xE9es sur le disque en utilisant l\u2019attribut "),Ws=l("code"),Sn=a("dataset_size"),Ln=a(". Comme le r\xE9sultat est exprim\xE9 en octets comme pr\xE9c\xE9demment, nous devons le convertir manuellement en gigaoctets :"),Yt=d(),g(We.$$.fragment),Zt=d(),g(Ke.$$.fragment),Qt=d(),qs=l("p"),Gn=a("Malgr\xE9 sa taille de pr\xE8s de 20 Go, nous pouvons charger et acc\xE9der au jeu de donn\xE9es avec beaucoup moins de RAM !"),Xt=d(),g(ve.$$.fragment),ea=d(),G=l("p"),Hn=a("Si vous \xEAtes familier avec Pandas, ce r\xE9sultat pourrait surprendre en raison de la c\xE9l\xE8bre "),Ye=l("a"),Un=a("r\xE8gle d\u2019or"),Bn=a(" de Wes Kinney selon laquelle vous avez g\xE9n\xE9ralement besoin de 5 \xE0 10 fois plus de RAM que la taille de votre jeu de donn\xE9es. Alors, comment \u{1F917} "),Ks=l("em"),Vn=a("Datasets"),Fn=a(" r\xE9sout-il ce probl\xE8me de gestion de la m\xE9moire ? \u{1F917} "),Ys=l("em"),Jn=a("Datasets"),Wn=a(" traite chaque jeu de donn\xE9es comme un "),Ze=l("a"),Kn=a("fichier mapp\xE9 en m\xE9moire"),Yn=a(". Cela fournit un mappage entre la RAM et le stockage du syst\xE8me de fichiers permettant \xE0 la biblioth\xE8que d\u2019acc\xE9der et d\u2019op\xE9rer sur des \xE9l\xE9ments du jeu de donn\xE9es sans avoir besoin de le charger enti\xE8rement en m\xE9moire."),sa=d(),S=l("p"),Zn=a("Les fichiers mapp\xE9s en m\xE9moire peuvent \xE9galement \xEAtre partag\xE9s entre plusieurs processus ce qui permet de parall\xE9liser des m\xE9thodes telles que "),Zs=l("code"),Qn=a("Dataset.map()"),Xn=a(" sans avoir \xE0 d\xE9placer ou copier le jeu de donn\xE9es. Sous le capot, ces capacit\xE9s sont toutes r\xE9alis\xE9es par le format de m\xE9moire "),Qe=l("a"),er=a("Apache Arrow"),sr=a(" et ["),Qs=l("code"),tr=a("pyarrow"),ar=a("]("),Xe=l("a"),nr=a("https://arrow.apache.org/docs/python/index"),rr=a(" .html), qui acc\xE9l\xE8rent le chargement et le traitement des donn\xE9es. (Pour plus de d\xE9tails sur Apache Arrow et les comparaisons avec Pandas, consultez "),es=l("a"),lr=a("l\u2019article de blog de Dejan Simic"),or=a(".) Pour voir ceci en action, effectuons un petit test de vitesse en it\xE9rant sur tous les \xE9l\xE9ments du jeu de donn\xE9es PubMed Abstracts :"),ta=d(),g(ss.$$.fragment),aa=d(),g(ts.$$.fragment),na=d(),K=l("p"),ir=a("Ici, nous avons utilis\xE9 le module "),Xs=l("code"),ur=a("timeit"),pr=a(" de Python pour mesurer le temps d\u2019ex\xE9cution pris par "),et=l("code"),dr=a("code_snippet"),cr=a(". Vous pourrez g\xE9n\xE9ralement it\xE9rer sur un jeu de donn\xE9es \xE0 une vitesse de quelques dixi\xE8mes de Go/s \xE0 plusieurs Go/s. Cela fonctionne tr\xE8s bien pour la grande majorit\xE9 des applications, mais vous devrez parfois travailler avec un jeu de donn\xE9es trop volumineux pour \xEAtre m\xEAme stock\xE9 sur le disque dur de votre ordinateur portable. Par exemple, si nous essayions de t\xE9l\xE9charger The Pile dans son int\xE9gralit\xE9, nous aurions besoin de 825 Go d\u2019espace disque libre ! Pour g\xE9rer ces cas, \u{1F917} "),st=l("em"),mr=a("Datasets"),fr=a(" fournit une fonctionnalit\xE9 de streaming qui nous permet de t\xE9l\xE9charger et d\u2019acc\xE9der aux \xE9l\xE9ments \xE0 la vol\xE9e, sans avoir besoin de t\xE9l\xE9charger l\u2019int\xE9gralit\xE9 du jeu de donn\xE9es. Voyons comment cela fonctionne."),ra=d(),g(xe.$$.fragment),la=d(),ue=l("h2"),be=l("a"),tt=l("span"),g(as.$$.fragment),hr=d(),at=l("span"),gr=a("Jeux de donn\xE9es en continu"),oa=d(),se=l("p"),vr=a("Pour activer le streaming du jeu de donn\xE9es, il vous suffit de passer l\u2019argument "),nt=l("code"),xr=a("streaming=True"),br=a(" \xE0 la fonction "),rt=l("code"),_r=a("load_dataset()"),$r=a(". Par exemple, chargeons \xE0 nouveau le jeu de donn\xE9es PubMed Abstracts mais en mode streaming :"),ia=d(),g(ns.$$.fragment),ua=d(),H=l("p"),jr=a("Au lieu du familier "),lt=l("code"),yr=a("Dataset"),Er=a(" que nous avons rencontr\xE9 ailleurs dans ce chapitre, l\u2019objet retourn\xE9 avec "),ot=l("code"),wr=a("streaming=True"),qr=a(" est un "),it=l("code"),Ar=a("IterableDataset"),zr=a(". Comme son nom l\u2019indique, pour acc\xE9der aux \xE9l\xE9ments d\u2019un "),ut=l("code"),Dr=a("IterableDataset"),Pr=a(", nous devons parcourir celui-ci. Nous pouvons acc\xE9der au premier \xE9l\xE9ment de notre jeu de donn\xE9es diffus\xE9 comme suit :"),pa=d(),g(rs.$$.fragment),da=d(),g(ls.$$.fragment),ca=d(),te=l("p"),Cr=a("Les \xE9l\xE9ments d\u2019un jeu de donn\xE9es diffus\xE9 en continu peuvent \xEAtre trait\xE9s \xE0 la vol\xE9e \xE0 l\u2019aide de "),pt=l("code"),kr=a("IterableDataset.map()"),Ir=a(", ce qui est utile pendant l\u2019entra\xEEnement si vous avez besoin de tokeniser les entr\xE9es. Le processus est exactement le m\xEAme que celui que nous avons utilis\xE9 pour tokeniser notre jeu de donn\xE9es dans "),As=l("a"),Tr=a("Chapitre 3"),Or=a(", \xE0 la seule diff\xE9rence que les sorties sont renvoy\xE9es une par une :"),ma=d(),g(os.$$.fragment),fa=d(),g(is.$$.fragment),ha=d(),g(_e.$$.fragment),ga=d(),Y=l("p"),Mr=a("Vous pouvez \xE9galement m\xE9langer un jeu de donn\xE9es diffus\xE9 en continu \xE0 l\u2019aide de "),dt=l("code"),Rr=a("IterableDataset.shuffle()"),Nr=a(", mais contrairement \xE0 "),ct=l("code"),Sr=a("Dataset.shuffle()"),Lr=a(", cela ne m\xE9lange que les \xE9l\xE9ments dans un "),mt=l("code"),Gr=a("buffer_size"),Hr=a(" pr\xE9d\xE9fini :"),va=d(),g(us.$$.fragment),xa=d(),g(ps.$$.fragment),ba=d(),Z=l("p"),Ur=a("Dans cet exemple, nous avons s\xE9lectionn\xE9 un exemple al\xE9atoire parmi les 10 000 premiers exemples du tampon. Une fois qu\u2019un exemple est acc\xE9d\xE9, sa place dans le tampon est remplie avec l\u2019exemple suivant dans le corpus (c\u2019est-\xE0-dire le 10 001e exemple dans le cas ci-dessus). Vous pouvez \xE9galement s\xE9lectionner des \xE9l\xE9ments d\u2019un jeu de donn\xE9es diffus\xE9 en continu \xE0 l\u2019aide des fonctions "),ft=l("code"),Br=a("IterableDataset.take()"),Vr=a(" et "),ht=l("code"),Fr=a("IterableDataset.skip()"),Jr=a(", qui agissent de la m\xEAme mani\xE8re que "),gt=l("code"),Wr=a("Dataset.select()"),Kr=a(". Par exemple, pour s\xE9lectionner les 5 premiers exemples dans le jeu de donn\xE9es PubMed Abstracts, nous pouvons proc\xE9der comme suit :"),_a=d(),g(ds.$$.fragment),$a=d(),g(cs.$$.fragment),ja=d(),$e=l("p"),Yr=a("De m\xEAme, vous pouvez utiliser la fonction "),vt=l("code"),Zr=a("IterableDataset.skip()"),Qr=a(" pour cr\xE9er des fractionnements d\u2019entra\xEEnement et de validation \xE0 partir d\u2019un jeu de donn\xE9es m\xE9lang\xE9 comme suit :"),ya=d(),g(ms.$$.fragment),Ea=d(),U=l("p"),Xr=a("Terminons notre exploration du streaming des jeux de donn\xE9es avec une application commune : combiner plusieurs jeux de donn\xE9es pour cr\xE9er un seul corpus. \u{1F917} "),xt=l("em"),el=a("Datasets"),sl=a(" fournit une fonction "),bt=l("code"),tl=a("interleave_datasets()"),al=a(" qui convertit une liste d\u2019objets "),_t=l("code"),nl=a("IterableDataset"),rl=a(" en un seul "),$t=l("code"),ll=a("IterableDataset"),ol=a(", o\xF9 les \xE9l\xE9ments du nouveau jeu de donn\xE9es sont obtenus en alternant entre les exemples source. Cette fonction est particuli\xE8rement utile lorsque vous essayez de combiner de grands jeux de donn\xE9es. Par exemple, streamons FreeLaw, un sous-ensemble de The Pile et qui est un jeu de donn\xE9es de 51 Go d\u2019avis juridiques de tribunaux am\xE9ricains :"),wa=d(),g(fs.$$.fragment),qa=d(),g(hs.$$.fragment),Aa=d(),je=l("p"),il=a("Ce jeu de donn\xE9es est suffisamment volumineux pour solliciter la RAM de la plupart des ordinateurs portables, mais nous avons pu le charger et y acc\xE9der sans transpirer ! Combinons maintenant les jeux de donn\xE9es FreeLaw et PubMed Abstracts avec la fonction "),jt=l("code"),ul=a("interleave_datasets()"),pl=a(" :"),za=d(),g(gs.$$.fragment),Da=d(),g(vs.$$.fragment),Pa=d(),ae=l("p"),dl=a("Ici, nous avons utilis\xE9 la fonction "),yt=l("code"),cl=a("islice()"),ml=a(" du module "),Et=l("code"),fl=a("itertools"),hl=a(" de Python pour s\xE9lectionner les deux premiers exemples du jeu de donn\xE9es combin\xE9. Nous pouvons voir qu\u2019ils correspondent aux premiers exemples de chacun des deux jeux de donn\xE9es source."),Ca=d(),zs=l("p"),gl=a("Enfin, si vous souhaitez streamer The Pile dans son int\xE9gralit\xE9 de 825 Go, vous pouvez r\xE9cup\xE9rer tous les fichiers pr\xE9par\xE9s comme suit :"),ka=d(),g(xs.$$.fragment),Ia=d(),g(bs.$$.fragment),Ta=d(),g(ye.$$.fragment),Oa=d(),Ds=l("p"),vl=a("Vous disposez maintenant de tous les outils dont vous avez besoin pour charger et traiter des jeux de donn\xE9es de toutes formes et tailles. Cependant \xE0 moins que vous ne soyez exceptionnellement chanceux, il arrivera un moment dans votre cheminement en traitement du langage naturel o\xF9 vous devrez r\xE9ellement cr\xE9er un jeu de donn\xE9es pour r\xE9soudre un probl\xE8me donn\xE9. C\u2019est le sujet de la section suivante !"),this.h()},l(e){const r=No('[data-svelte="svelte-1phssyn"]',document.head);p=o(r,"META",{name:!0,content:!0}),r.forEach(t),I=c(e),h=o(e,"H1",{class:!0});var _s=i(h);q=o(_s,"A",{id:!0,class:!0,href:!0});var wt=i(q);P=o(wt,"SPAN",{});var qt=i(P);v(f.$$.fragment,qt),qt.forEach(t),wt.forEach(t),D=c(_s),C=o(_s,"SPAN",{});var At=i(C);w=n(At,"Donn\xE9es massives ? \u{1F917} *Datasets* \xE0 la rescousse !"),At.forEach(t),_s.forEach(t),j=c(e),v(y.$$.fragment,e),A=c(e),k=o(e,"P",{});var pe=i(k);M=n(pe,"De nos jours, il n\u2019est pas rare de travailler avec des jeux de donn\xE9es de plusieurs gigaoctets surtout si vous envisagez de pr\xE9-entra\xEEner un "),E=o(pe,"EM",{});var xl=i(E);O=n(xl,"transformer"),xl.forEach(t),V=n(pe," comme BERT ou GPT-2 \xE0 partir de z\xE9ro. Dans ces cas, m\xEAme "),N=o(pe,"EM",{});var bl=i(N);T=n(bl,"charger"),bl.forEach(t),J=n(pe," les donn\xE9es peut \xEAtre un d\xE9fi. Par exemple, le corpus WebText utilis\xE9 pour pr\xE9-entra\xEEner GPT-2 se compose de plus de 8 millions de documents et de 40 Go de texte. Le charger dans la RAM de votre ordinateur portable est susceptible de lui donner une crise cardiaque !"),pe.forEach(t),De=c(e),L=o(e,"P",{});var Ee=i(L);$s=n(Ee,"Heureusement, \u{1F917} "),de=o(Ee,"EM",{});var _l=i(de);Va=n(_l,"Datasets"),_l.forEach(t),Fa=n(Ee," a \xE9t\xE9 con\xE7u pour surmonter ces limitations. Il vous lib\xE8re des probl\xE8mes de gestion de la m\xE9moire en traitant les jeux de donn\xE9es comme des fichiers "),Os=o(Ee,"EM",{});var $l=i(Os);Ja=n($l,"mapp\xE9s en m\xE9moire"),$l.forEach(t),Wa=n(Ee,", ainsi que des limites du disque dur en faisant du "),Ms=o(Ee,"EM",{});var jl=i(Ms);Ka=n(jl,"streaming"),jl.forEach(t),Ya=n(Ee," sur les entr\xE9es dans un corpus."),Ee.forEach(t),Dt=c(e),v(Pe.$$.fragment,e),Pt=c(e),X=o(e,"P",{});var Ps=i(X);Za=n(Ps,"Dans cette section, nous allons explorer ces fonctionnalit\xE9s de \u{1F917} "),Rs=o(Ps,"EM",{});var yl=i(Rs);Qa=n(yl,"Datasets"),yl.forEach(t),Xa=n(Ps," avec un \xE9norme corpus de 825 Go connu sous le nom de "),Ce=o(Ps,"A",{href:!0,rel:!0});var El=i(Ce);en=n(El,"The Pile"),El.forEach(t),sn=n(Ps,". Commen\xE7ons !"),Ps.forEach(t),Ct=c(e),oe=o(e,"H2",{class:!0});var Ra=i(oe);ce=o(Ra,"A",{id:!0,class:!0,href:!0});var wl=i(ce);Ns=o(wl,"SPAN",{});var ql=i(Ns);v(ke.$$.fragment,ql),ql.forEach(t),wl.forEach(t),tn=c(Ra),Ss=o(Ra,"SPAN",{});var Al=i(Ss);an=n(Al,"Qu'est-ce que *The Pile* ?"),Al.forEach(t),Ra.forEach(t),kt=c(e),R=o(e,"P",{});var B=i(R);nn=n(B,"The Pile est un corpus de texte en anglais cr\xE9\xE9 par "),Ie=o(B,"A",{href:!0,rel:!0});var zl=i(Ie);rn=n(zl,"EleutherAI"),zl.forEach(t),ln=n(B," pour entra\xEEner des mod\xE8les de langage \xE0 grande \xE9chelle. Il comprend une gamme vari\xE9e de jeux de donn\xE9es, couvrant des articles scientifiques, des r\xE9f\xE9rentiels de code GitHub et du texte Web filtr\xE9. Le corpus d\u2019entra\xEEnement est disponible en "),Te=o(B,"A",{href:!0,rel:!0});var Dl=i(Te);on=n(Dl,"morceaux de 14 Go"),Dl.forEach(t),un=n(B," et vous pouvez aussi t\xE9l\xE9charger plusieurs des "),Oe=o(B,"A",{href:!0,rel:!0});var Pl=i(Oe);pn=n(Pl,"composants individuels"),Pl.forEach(t),dn=n(B,". Commen\xE7ons par jeter un coup d\u2019\u0153il au jeu de donn\xE9es PubMed Abstracts, qui est un corpus de r\xE9sum\xE9s de 15 millions de publications biom\xE9dicales sur "),Me=o(B,"A",{href:!0,rel:!0});var Cl=i(Me);cn=n(Cl,"PubMed"),Cl.forEach(t),mn=n(B,". Le jeu de donn\xE9es est au "),Re=o(B,"A",{href:!0,rel:!0});var kl=i(Re);fn=n(kl,"format JSON Lines"),kl.forEach(t),hn=n(B," et est compress\xE9 \xE0 l\u2019aide de la biblioth\xE8que "),Ls=o(B,"CODE",{});var Il=i(Ls);gn=n(Il,"zstandard"),Il.forEach(t),vn=n(B,". Nous devons donc d\u2019abord installer cette biblioth\xE8que :"),B.forEach(t),It=c(e),v(Ne.$$.fragment,e),Tt=c(e),me=o(e,"P",{});var Na=i(me);xn=n(Na,"Ensuite, nous pouvons charger le jeu de donn\xE9es en utilisant la m\xE9thode pour les fichiers distants que nous avons apprise dans "),js=o(Na,"A",{href:!0});var Tl=i(js);bn=n(Tl,"section 2"),Tl.forEach(t),_n=n(Na," :"),Na.forEach(t),Ot=c(e),v(Se.$$.fragment,e),Mt=c(e),v(Le.$$.fragment,e),Rt=c(e),ys=o(e,"P",{});var Ol=i(ys);$n=n(Ol,"Nous pouvons voir qu\u2019il y a 15 518 009 lignes et 2 colonnes dans notre jeu de donn\xE9es. C\u2019est beaucoup !"),Ol.forEach(t),Nt=c(e),v(fe.$$.fragment,e),St=c(e),Es=o(e,"P",{});var Ml=i(Es);jn=n(Ml,"Inspectons le contenu du premier exemple :"),Ml.forEach(t),Lt=c(e),v(Ge.$$.fragment,e),Gt=c(e),v(He.$$.fragment,e),Ht=c(e),ws=o(e,"P",{});var Rl=i(ws);yn=n(Rl,"Cela ressemble au r\xE9sum\xE9 d\u2019un article m\xE9dical. Voyons maintenant combien de RAM nous avons utilis\xE9 pour charger le jeu de donn\xE9es !"),Rl.forEach(t),Ut=c(e),ie=o(e,"H2",{class:!0});var Sa=i(ie);he=o(Sa,"A",{id:!0,class:!0,href:!0});var Nl=i(he);Gs=o(Nl,"SPAN",{});var Sl=i(Gs);v(Ue.$$.fragment,Sl),Sl.forEach(t),Nl.forEach(t),En=c(Sa),Hs=o(Sa,"SPAN",{});var Ll=i(Hs);wn=n(Ll,"La magie du *memory mapping*"),Ll.forEach(t),Sa.forEach(t),Bt=c(e),ee=o(e,"P",{});var Cs=i(ee);qn=n(Cs,"Un moyen simple de mesurer l\u2019utilisation de la m\xE9moire dans Python consiste \xE0 utiliser la biblioth\xE8que "),Be=o(Cs,"A",{href:!0,rel:!0});var Gl=i(Be);Us=o(Gl,"CODE",{});var Hl=i(Us);An=n(Hl,"psutil"),Hl.forEach(t),Gl.forEach(t),zn=n(Cs," qui peut \xEAtre install\xE9e avec "),Bs=o(Cs,"CODE",{});var Ul=i(Bs);Dn=n(Ul,"pip"),Ul.forEach(t),Pn=n(Cs," comme suit :"),Cs.forEach(t),Vt=c(e),v(Ve.$$.fragment,e),Ft=c(e),ge=o(e,"P",{});var La=i(ge);Cn=n(La,"Elle fournit une classe "),Vs=o(La,"CODE",{});var Bl=i(Vs);kn=n(Bl,"Process"),Bl.forEach(t),In=n(La," qui permet de v\xE9rifier l\u2019utilisation de la m\xE9moire du processus en cours :"),La.forEach(t),Jt=c(e),v(Fe.$$.fragment,e),Wt=c(e),v(Je.$$.fragment,e),Kt=c(e),W=o(e,"P",{});var we=i(W);Tn=n(we,"Ici, l\u2019attribut "),Fs=o(we,"CODE",{});var Vl=i(Fs);On=n(Vl,"rss"),Vl.forEach(t),Mn=n(we," fait r\xE9f\xE9rence \xE0 la "),Js=o(we,"EM",{});var Fl=i(Js);Rn=n(Fl,"taille de l\u2019ensemble r\xE9sident"),Fl.forEach(t),Nn=n(we,", qui est la fraction de m\xE9moire qu\u2019un processus occupe dans la RAM. Cette mesure inclut \xE9galement la m\xE9moire utilis\xE9e par l\u2019interpr\xE9teur Python et les biblioth\xE8ques que nous avons charg\xE9es, de sorte que la quantit\xE9 r\xE9elle de m\xE9moire utilis\xE9e pour charger le jeu de donn\xE9es est un peu plus petite. \xC0 titre de comparaison, voyons la taille du jeu de donn\xE9es sur le disque en utilisant l\u2019attribut "),Ws=o(we,"CODE",{});var Jl=i(Ws);Sn=n(Jl,"dataset_size"),Jl.forEach(t),Ln=n(we,". Comme le r\xE9sultat est exprim\xE9 en octets comme pr\xE9c\xE9demment, nous devons le convertir manuellement en gigaoctets :"),we.forEach(t),Yt=c(e),v(We.$$.fragment,e),Zt=c(e),v(Ke.$$.fragment,e),Qt=c(e),qs=o(e,"P",{});var Wl=i(qs);Gn=n(Wl,"Malgr\xE9 sa taille de pr\xE8s de 20 Go, nous pouvons charger et acc\xE9der au jeu de donn\xE9es avec beaucoup moins de RAM !"),Wl.forEach(t),Xt=c(e),v(ve.$$.fragment,e),ea=c(e),G=o(e,"P",{});var ne=i(G);Hn=n(ne,"Si vous \xEAtes familier avec Pandas, ce r\xE9sultat pourrait surprendre en raison de la c\xE9l\xE8bre "),Ye=o(ne,"A",{href:!0,rel:!0});var Kl=i(Ye);Un=n(Kl,"r\xE8gle d\u2019or"),Kl.forEach(t),Bn=n(ne," de Wes Kinney selon laquelle vous avez g\xE9n\xE9ralement besoin de 5 \xE0 10 fois plus de RAM que la taille de votre jeu de donn\xE9es. Alors, comment \u{1F917} "),Ks=o(ne,"EM",{});var Yl=i(Ks);Vn=n(Yl,"Datasets"),Yl.forEach(t),Fn=n(ne," r\xE9sout-il ce probl\xE8me de gestion de la m\xE9moire ? \u{1F917} "),Ys=o(ne,"EM",{});var Zl=i(Ys);Jn=n(Zl,"Datasets"),Zl.forEach(t),Wn=n(ne," traite chaque jeu de donn\xE9es comme un "),Ze=o(ne,"A",{href:!0,rel:!0});var Ql=i(Ze);Kn=n(Ql,"fichier mapp\xE9 en m\xE9moire"),Ql.forEach(t),Yn=n(ne,". Cela fournit un mappage entre la RAM et le stockage du syst\xE8me de fichiers permettant \xE0 la biblioth\xE8que d\u2019acc\xE9der et d\u2019op\xE9rer sur des \xE9l\xE9ments du jeu de donn\xE9es sans avoir besoin de le charger enti\xE8rement en m\xE9moire."),ne.forEach(t),sa=c(e),S=o(e,"P",{});var Q=i(S);Zn=n(Q,"Les fichiers mapp\xE9s en m\xE9moire peuvent \xE9galement \xEAtre partag\xE9s entre plusieurs processus ce qui permet de parall\xE9liser des m\xE9thodes telles que "),Zs=o(Q,"CODE",{});var Xl=i(Zs);Qn=n(Xl,"Dataset.map()"),Xl.forEach(t),Xn=n(Q," sans avoir \xE0 d\xE9placer ou copier le jeu de donn\xE9es. Sous le capot, ces capacit\xE9s sont toutes r\xE9alis\xE9es par le format de m\xE9moire "),Qe=o(Q,"A",{href:!0,rel:!0});var eo=i(Qe);er=n(eo,"Apache Arrow"),eo.forEach(t),sr=n(Q," et ["),Qs=o(Q,"CODE",{});var so=i(Qs);tr=n(so,"pyarrow"),so.forEach(t),ar=n(Q,"]("),Xe=o(Q,"A",{href:!0,rel:!0});var to=i(Xe);nr=n(to,"https://arrow.apache.org/docs/python/index"),to.forEach(t),rr=n(Q," .html), qui acc\xE9l\xE8rent le chargement et le traitement des donn\xE9es. (Pour plus de d\xE9tails sur Apache Arrow et les comparaisons avec Pandas, consultez "),es=o(Q,"A",{href:!0,rel:!0});var ao=i(es);lr=n(ao,"l\u2019article de blog de Dejan Simic"),ao.forEach(t),or=n(Q,".) Pour voir ceci en action, effectuons un petit test de vitesse en it\xE9rant sur tous les \xE9l\xE9ments du jeu de donn\xE9es PubMed Abstracts :"),Q.forEach(t),ta=c(e),v(ss.$$.fragment,e),aa=c(e),v(ts.$$.fragment,e),na=c(e),K=o(e,"P",{});var qe=i(K);ir=n(qe,"Ici, nous avons utilis\xE9 le module "),Xs=o(qe,"CODE",{});var no=i(Xs);ur=n(no,"timeit"),no.forEach(t),pr=n(qe," de Python pour mesurer le temps d\u2019ex\xE9cution pris par "),et=o(qe,"CODE",{});var ro=i(et);dr=n(ro,"code_snippet"),ro.forEach(t),cr=n(qe,". Vous pourrez g\xE9n\xE9ralement it\xE9rer sur un jeu de donn\xE9es \xE0 une vitesse de quelques dixi\xE8mes de Go/s \xE0 plusieurs Go/s. Cela fonctionne tr\xE8s bien pour la grande majorit\xE9 des applications, mais vous devrez parfois travailler avec un jeu de donn\xE9es trop volumineux pour \xEAtre m\xEAme stock\xE9 sur le disque dur de votre ordinateur portable. Par exemple, si nous essayions de t\xE9l\xE9charger The Pile dans son int\xE9gralit\xE9, nous aurions besoin de 825 Go d\u2019espace disque libre ! Pour g\xE9rer ces cas, \u{1F917} "),st=o(qe,"EM",{});var lo=i(st);mr=n(lo,"Datasets"),lo.forEach(t),fr=n(qe," fournit une fonctionnalit\xE9 de streaming qui nous permet de t\xE9l\xE9charger et d\u2019acc\xE9der aux \xE9l\xE9ments \xE0 la vol\xE9e, sans avoir besoin de t\xE9l\xE9charger l\u2019int\xE9gralit\xE9 du jeu de donn\xE9es. Voyons comment cela fonctionne."),qe.forEach(t),ra=c(e),v(xe.$$.fragment,e),la=c(e),ue=o(e,"H2",{class:!0});var Ga=i(ue);be=o(Ga,"A",{id:!0,class:!0,href:!0});var oo=i(be);tt=o(oo,"SPAN",{});var io=i(tt);v(as.$$.fragment,io),io.forEach(t),oo.forEach(t),hr=c(Ga),at=o(Ga,"SPAN",{});var uo=i(at);gr=n(uo,"Jeux de donn\xE9es en continu"),uo.forEach(t),Ga.forEach(t),oa=c(e),se=o(e,"P",{});var ks=i(se);vr=n(ks,"Pour activer le streaming du jeu de donn\xE9es, il vous suffit de passer l\u2019argument "),nt=o(ks,"CODE",{});var po=i(nt);xr=n(po,"streaming=True"),po.forEach(t),br=n(ks," \xE0 la fonction "),rt=o(ks,"CODE",{});var co=i(rt);_r=n(co,"load_dataset()"),co.forEach(t),$r=n(ks,". Par exemple, chargeons \xE0 nouveau le jeu de donn\xE9es PubMed Abstracts mais en mode streaming :"),ks.forEach(t),ia=c(e),v(ns.$$.fragment,e),ua=c(e),H=o(e,"P",{});var re=i(H);jr=n(re,"Au lieu du familier "),lt=o(re,"CODE",{});var mo=i(lt);yr=n(mo,"Dataset"),mo.forEach(t),Er=n(re," que nous avons rencontr\xE9 ailleurs dans ce chapitre, l\u2019objet retourn\xE9 avec "),ot=o(re,"CODE",{});var fo=i(ot);wr=n(fo,"streaming=True"),fo.forEach(t),qr=n(re," est un "),it=o(re,"CODE",{});var ho=i(it);Ar=n(ho,"IterableDataset"),ho.forEach(t),zr=n(re,". Comme son nom l\u2019indique, pour acc\xE9der aux \xE9l\xE9ments d\u2019un "),ut=o(re,"CODE",{});var go=i(ut);Dr=n(go,"IterableDataset"),go.forEach(t),Pr=n(re,", nous devons parcourir celui-ci. Nous pouvons acc\xE9der au premier \xE9l\xE9ment de notre jeu de donn\xE9es diffus\xE9 comme suit :"),re.forEach(t),pa=c(e),v(rs.$$.fragment,e),da=c(e),v(ls.$$.fragment,e),ca=c(e),te=o(e,"P",{});var Is=i(te);Cr=n(Is,"Les \xE9l\xE9ments d\u2019un jeu de donn\xE9es diffus\xE9 en continu peuvent \xEAtre trait\xE9s \xE0 la vol\xE9e \xE0 l\u2019aide de "),pt=o(Is,"CODE",{});var vo=i(pt);kr=n(vo,"IterableDataset.map()"),vo.forEach(t),Ir=n(Is,", ce qui est utile pendant l\u2019entra\xEEnement si vous avez besoin de tokeniser les entr\xE9es. Le processus est exactement le m\xEAme que celui que nous avons utilis\xE9 pour tokeniser notre jeu de donn\xE9es dans "),As=o(Is,"A",{href:!0});var xo=i(As);Tr=n(xo,"Chapitre 3"),xo.forEach(t),Or=n(Is,", \xE0 la seule diff\xE9rence que les sorties sont renvoy\xE9es une par une :"),Is.forEach(t),ma=c(e),v(os.$$.fragment,e),fa=c(e),v(is.$$.fragment,e),ha=c(e),v(_e.$$.fragment,e),ga=c(e),Y=o(e,"P",{});var Ae=i(Y);Mr=n(Ae,"Vous pouvez \xE9galement m\xE9langer un jeu de donn\xE9es diffus\xE9 en continu \xE0 l\u2019aide de "),dt=o(Ae,"CODE",{});var bo=i(dt);Rr=n(bo,"IterableDataset.shuffle()"),bo.forEach(t),Nr=n(Ae,", mais contrairement \xE0 "),ct=o(Ae,"CODE",{});var _o=i(ct);Sr=n(_o,"Dataset.shuffle()"),_o.forEach(t),Lr=n(Ae,", cela ne m\xE9lange que les \xE9l\xE9ments dans un "),mt=o(Ae,"CODE",{});var $o=i(mt);Gr=n($o,"buffer_size"),$o.forEach(t),Hr=n(Ae," pr\xE9d\xE9fini :"),Ae.forEach(t),va=c(e),v(us.$$.fragment,e),xa=c(e),v(ps.$$.fragment,e),ba=c(e),Z=o(e,"P",{});var ze=i(Z);Ur=n(ze,"Dans cet exemple, nous avons s\xE9lectionn\xE9 un exemple al\xE9atoire parmi les 10 000 premiers exemples du tampon. Une fois qu\u2019un exemple est acc\xE9d\xE9, sa place dans le tampon est remplie avec l\u2019exemple suivant dans le corpus (c\u2019est-\xE0-dire le 10 001e exemple dans le cas ci-dessus). Vous pouvez \xE9galement s\xE9lectionner des \xE9l\xE9ments d\u2019un jeu de donn\xE9es diffus\xE9 en continu \xE0 l\u2019aide des fonctions "),ft=o(ze,"CODE",{});var jo=i(ft);Br=n(jo,"IterableDataset.take()"),jo.forEach(t),Vr=n(ze," et "),ht=o(ze,"CODE",{});var yo=i(ht);Fr=n(yo,"IterableDataset.skip()"),yo.forEach(t),Jr=n(ze,", qui agissent de la m\xEAme mani\xE8re que "),gt=o(ze,"CODE",{});var Eo=i(gt);Wr=n(Eo,"Dataset.select()"),Eo.forEach(t),Kr=n(ze,". Par exemple, pour s\xE9lectionner les 5 premiers exemples dans le jeu de donn\xE9es PubMed Abstracts, nous pouvons proc\xE9der comme suit :"),ze.forEach(t),_a=c(e),v(ds.$$.fragment,e),$a=c(e),v(cs.$$.fragment,e),ja=c(e),$e=o(e,"P",{});var Ha=i($e);Yr=n(Ha,"De m\xEAme, vous pouvez utiliser la fonction "),vt=o(Ha,"CODE",{});var wo=i(vt);Zr=n(wo,"IterableDataset.skip()"),wo.forEach(t),Qr=n(Ha," pour cr\xE9er des fractionnements d\u2019entra\xEEnement et de validation \xE0 partir d\u2019un jeu de donn\xE9es m\xE9lang\xE9 comme suit :"),Ha.forEach(t),ya=c(e),v(ms.$$.fragment,e),Ea=c(e),U=o(e,"P",{});var le=i(U);Xr=n(le,"Terminons notre exploration du streaming des jeux de donn\xE9es avec une application commune : combiner plusieurs jeux de donn\xE9es pour cr\xE9er un seul corpus. \u{1F917} "),xt=o(le,"EM",{});var qo=i(xt);el=n(qo,"Datasets"),qo.forEach(t),sl=n(le," fournit une fonction "),bt=o(le,"CODE",{});var Ao=i(bt);tl=n(Ao,"interleave_datasets()"),Ao.forEach(t),al=n(le," qui convertit une liste d\u2019objets "),_t=o(le,"CODE",{});var zo=i(_t);nl=n(zo,"IterableDataset"),zo.forEach(t),rl=n(le," en un seul "),$t=o(le,"CODE",{});var Do=i($t);ll=n(Do,"IterableDataset"),Do.forEach(t),ol=n(le,", o\xF9 les \xE9l\xE9ments du nouveau jeu de donn\xE9es sont obtenus en alternant entre les exemples source. Cette fonction est particuli\xE8rement utile lorsque vous essayez de combiner de grands jeux de donn\xE9es. Par exemple, streamons FreeLaw, un sous-ensemble de The Pile et qui est un jeu de donn\xE9es de 51 Go d\u2019avis juridiques de tribunaux am\xE9ricains :"),le.forEach(t),wa=c(e),v(fs.$$.fragment,e),qa=c(e),v(hs.$$.fragment,e),Aa=c(e),je=o(e,"P",{});var Ua=i(je);il=n(Ua,"Ce jeu de donn\xE9es est suffisamment volumineux pour solliciter la RAM de la plupart des ordinateurs portables, mais nous avons pu le charger et y acc\xE9der sans transpirer ! Combinons maintenant les jeux de donn\xE9es FreeLaw et PubMed Abstracts avec la fonction "),jt=o(Ua,"CODE",{});var Po=i(jt);ul=n(Po,"interleave_datasets()"),Po.forEach(t),pl=n(Ua," :"),Ua.forEach(t),za=c(e),v(gs.$$.fragment,e),Da=c(e),v(vs.$$.fragment,e),Pa=c(e),ae=o(e,"P",{});var Ts=i(ae);dl=n(Ts,"Ici, nous avons utilis\xE9 la fonction "),yt=o(Ts,"CODE",{});var Co=i(yt);cl=n(Co,"islice()"),Co.forEach(t),ml=n(Ts," du module "),Et=o(Ts,"CODE",{});var ko=i(Et);fl=n(ko,"itertools"),ko.forEach(t),hl=n(Ts," de Python pour s\xE9lectionner les deux premiers exemples du jeu de donn\xE9es combin\xE9. Nous pouvons voir qu\u2019ils correspondent aux premiers exemples de chacun des deux jeux de donn\xE9es source."),Ts.forEach(t),Ca=c(e),zs=o(e,"P",{});var Io=i(zs);gl=n(Io,"Enfin, si vous souhaitez streamer The Pile dans son int\xE9gralit\xE9 de 825 Go, vous pouvez r\xE9cup\xE9rer tous les fichiers pr\xE9par\xE9s comme suit :"),Io.forEach(t),ka=c(e),v(xs.$$.fragment,e),Ia=c(e),v(bs.$$.fragment,e),Ta=c(e),v(ye.$$.fragment,e),Oa=c(e),Ds=o(e,"P",{});var To=i(Ds);vl=n(To,"Vous disposez maintenant de tous les outils dont vous avez besoin pour charger et traiter des jeux de donn\xE9es de toutes formes et tailles. Cependant \xE0 moins que vous ne soyez exceptionnellement chanceux, il arrivera un moment dans votre cheminement en traitement du langage naturel o\xF9 vous devrez r\xE9ellement cr\xE9er un jeu de donn\xE9es pour r\xE9soudre un probl\xE8me donn\xE9. C\u2019est le sujet de la section suivante !"),To.forEach(t),this.h()},h(){m(p,"name","hf:doc:metadata"),m(p,"content",JSON.stringify(Wo)),m(q,"id","donnes-massives-datasets-la-rescousse"),m(q,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),m(q,"href","#donnes-massives-datasets-la-rescousse"),m(h,"class","relative group"),m(Ce,"href","https://pile.eleuther.ai"),m(Ce,"rel","nofollow"),m(ce,"id","questce-que-the-pile"),m(ce,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),m(ce,"href","#questce-que-the-pile"),m(oe,"class","relative group"),m(Ie,"href","https://www.eleuther.ai"),m(Ie,"rel","nofollow"),m(Te,"href","https://mystic.the-eye.eu/public/AI/pile/"),m(Te,"rel","nofollow"),m(Oe,"href","https://mystic.the-eye.eu/public/AI/pile_preliminary_components/"),m(Oe,"rel","nofollow"),m(Me,"href","https://pubmed.ncbi.nlm.nih.gov/"),m(Me,"rel","nofollow"),m(Re,"href","https://jsonlines.org"),m(Re,"rel","nofollow"),m(js,"href","/course/fr/chapter5/2"),m(he,"id","la-magie-du-memory-mapping"),m(he,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),m(he,"href","#la-magie-du-memory-mapping"),m(ie,"class","relative group"),m(Be,"href","https://psutil.readthedocs.io/en/latest/"),m(Be,"rel","nofollow"),m(Ye,"href","https://wesmckinney.com/blog/apache-arrow-pandas-internals/"),m(Ye,"rel","nofollow"),m(Ze,"href","https://en.wikipedia.org/wiki/Memory-mapped_file"),m(Ze,"rel","nofollow"),m(Qe,"href","https://arrow.apache.org"),m(Qe,"rel","nofollow"),m(Xe,"href","https://arrow.apache.org/docs/python/index"),m(Xe,"rel","nofollow"),m(es,"href","https://towardsdatascience.com/apache-arrow-read-dataframe-with-zero-memory-69634092b1a"),m(es,"rel","nofollow"),m(be,"id","jeux-de-donnes-en-continu"),m(be,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),m(be,"href","#jeux-de-donnes-en-continu"),m(ue,"class","relative group"),m(As,"href","/course/fr/chapter3")},m(e,r){s(document.head,p),u(e,I,r),u(e,h,r),s(h,q),s(q,P),x(f,P,null),s(h,D),s(h,C),s(C,w),u(e,j,r),x(y,e,r),u(e,A,r),u(e,k,r),s(k,M),s(k,E),s(E,O),s(k,V),s(k,N),s(N,T),s(k,J),u(e,De,r),u(e,L,r),s(L,$s),s(L,de),s(de,Va),s(L,Fa),s(L,Os),s(Os,Ja),s(L,Wa),s(L,Ms),s(Ms,Ka),s(L,Ya),u(e,Dt,r),x(Pe,e,r),u(e,Pt,r),u(e,X,r),s(X,Za),s(X,Rs),s(Rs,Qa),s(X,Xa),s(X,Ce),s(Ce,en),s(X,sn),u(e,Ct,r),u(e,oe,r),s(oe,ce),s(ce,Ns),x(ke,Ns,null),s(oe,tn),s(oe,Ss),s(Ss,an),u(e,kt,r),u(e,R,r),s(R,nn),s(R,Ie),s(Ie,rn),s(R,ln),s(R,Te),s(Te,on),s(R,un),s(R,Oe),s(Oe,pn),s(R,dn),s(R,Me),s(Me,cn),s(R,mn),s(R,Re),s(Re,fn),s(R,hn),s(R,Ls),s(Ls,gn),s(R,vn),u(e,It,r),x(Ne,e,r),u(e,Tt,r),u(e,me,r),s(me,xn),s(me,js),s(js,bn),s(me,_n),u(e,Ot,r),x(Se,e,r),u(e,Mt,r),x(Le,e,r),u(e,Rt,r),u(e,ys,r),s(ys,$n),u(e,Nt,r),x(fe,e,r),u(e,St,r),u(e,Es,r),s(Es,jn),u(e,Lt,r),x(Ge,e,r),u(e,Gt,r),x(He,e,r),u(e,Ht,r),u(e,ws,r),s(ws,yn),u(e,Ut,r),u(e,ie,r),s(ie,he),s(he,Gs),x(Ue,Gs,null),s(ie,En),s(ie,Hs),s(Hs,wn),u(e,Bt,r),u(e,ee,r),s(ee,qn),s(ee,Be),s(Be,Us),s(Us,An),s(ee,zn),s(ee,Bs),s(Bs,Dn),s(ee,Pn),u(e,Vt,r),x(Ve,e,r),u(e,Ft,r),u(e,ge,r),s(ge,Cn),s(ge,Vs),s(Vs,kn),s(ge,In),u(e,Jt,r),x(Fe,e,r),u(e,Wt,r),x(Je,e,r),u(e,Kt,r),u(e,W,r),s(W,Tn),s(W,Fs),s(Fs,On),s(W,Mn),s(W,Js),s(Js,Rn),s(W,Nn),s(W,Ws),s(Ws,Sn),s(W,Ln),u(e,Yt,r),x(We,e,r),u(e,Zt,r),x(Ke,e,r),u(e,Qt,r),u(e,qs,r),s(qs,Gn),u(e,Xt,r),x(ve,e,r),u(e,ea,r),u(e,G,r),s(G,Hn),s(G,Ye),s(Ye,Un),s(G,Bn),s(G,Ks),s(Ks,Vn),s(G,Fn),s(G,Ys),s(Ys,Jn),s(G,Wn),s(G,Ze),s(Ze,Kn),s(G,Yn),u(e,sa,r),u(e,S,r),s(S,Zn),s(S,Zs),s(Zs,Qn),s(S,Xn),s(S,Qe),s(Qe,er),s(S,sr),s(S,Qs),s(Qs,tr),s(S,ar),s(S,Xe),s(Xe,nr),s(S,rr),s(S,es),s(es,lr),s(S,or),u(e,ta,r),x(ss,e,r),u(e,aa,r),x(ts,e,r),u(e,na,r),u(e,K,r),s(K,ir),s(K,Xs),s(Xs,ur),s(K,pr),s(K,et),s(et,dr),s(K,cr),s(K,st),s(st,mr),s(K,fr),u(e,ra,r),x(xe,e,r),u(e,la,r),u(e,ue,r),s(ue,be),s(be,tt),x(as,tt,null),s(ue,hr),s(ue,at),s(at,gr),u(e,oa,r),u(e,se,r),s(se,vr),s(se,nt),s(nt,xr),s(se,br),s(se,rt),s(rt,_r),s(se,$r),u(e,ia,r),x(ns,e,r),u(e,ua,r),u(e,H,r),s(H,jr),s(H,lt),s(lt,yr),s(H,Er),s(H,ot),s(ot,wr),s(H,qr),s(H,it),s(it,Ar),s(H,zr),s(H,ut),s(ut,Dr),s(H,Pr),u(e,pa,r),x(rs,e,r),u(e,da,r),x(ls,e,r),u(e,ca,r),u(e,te,r),s(te,Cr),s(te,pt),s(pt,kr),s(te,Ir),s(te,As),s(As,Tr),s(te,Or),u(e,ma,r),x(os,e,r),u(e,fa,r),x(is,e,r),u(e,ha,r),x(_e,e,r),u(e,ga,r),u(e,Y,r),s(Y,Mr),s(Y,dt),s(dt,Rr),s(Y,Nr),s(Y,ct),s(ct,Sr),s(Y,Lr),s(Y,mt),s(mt,Gr),s(Y,Hr),u(e,va,r),x(us,e,r),u(e,xa,r),x(ps,e,r),u(e,ba,r),u(e,Z,r),s(Z,Ur),s(Z,ft),s(ft,Br),s(Z,Vr),s(Z,ht),s(ht,Fr),s(Z,Jr),s(Z,gt),s(gt,Wr),s(Z,Kr),u(e,_a,r),x(ds,e,r),u(e,$a,r),x(cs,e,r),u(e,ja,r),u(e,$e,r),s($e,Yr),s($e,vt),s(vt,Zr),s($e,Qr),u(e,ya,r),x(ms,e,r),u(e,Ea,r),u(e,U,r),s(U,Xr),s(U,xt),s(xt,el),s(U,sl),s(U,bt),s(bt,tl),s(U,al),s(U,_t),s(_t,nl),s(U,rl),s(U,$t),s($t,ll),s(U,ol),u(e,wa,r),x(fs,e,r),u(e,qa,r),x(hs,e,r),u(e,Aa,r),u(e,je,r),s(je,il),s(je,jt),s(jt,ul),s(je,pl),u(e,za,r),x(gs,e,r),u(e,Da,r),x(vs,e,r),u(e,Pa,r),u(e,ae,r),s(ae,dl),s(ae,yt),s(yt,cl),s(ae,ml),s(ae,Et),s(Et,fl),s(ae,hl),u(e,Ca,r),u(e,zs,r),s(zs,gl),u(e,ka,r),x(xs,e,r),u(e,Ia,r),x(bs,e,r),u(e,Ta,r),x(ye,e,r),u(e,Oa,r),u(e,Ds,r),s(Ds,vl),Ma=!0},p(e,[r]){const _s={};r&2&&(_s.$$scope={dirty:r,ctx:e}),fe.$set(_s);const wt={};r&2&&(wt.$$scope={dirty:r,ctx:e}),ve.$set(wt);const qt={};r&2&&(qt.$$scope={dirty:r,ctx:e}),xe.$set(qt);const At={};r&2&&(At.$$scope={dirty:r,ctx:e}),_e.$set(At);const pe={};r&2&&(pe.$$scope={dirty:r,ctx:e}),ye.$set(pe)},i(e){Ma||(b(f.$$.fragment,e),b(y.$$.fragment,e),b(Pe.$$.fragment,e),b(ke.$$.fragment,e),b(Ne.$$.fragment,e),b(Se.$$.fragment,e),b(Le.$$.fragment,e),b(fe.$$.fragment,e),b(Ge.$$.fragment,e),b(He.$$.fragment,e),b(Ue.$$.fragment,e),b(Ve.$$.fragment,e),b(Fe.$$.fragment,e),b(Je.$$.fragment,e),b(We.$$.fragment,e),b(Ke.$$.fragment,e),b(ve.$$.fragment,e),b(ss.$$.fragment,e),b(ts.$$.fragment,e),b(xe.$$.fragment,e),b(as.$$.fragment,e),b(ns.$$.fragment,e),b(rs.$$.fragment,e),b(ls.$$.fragment,e),b(os.$$.fragment,e),b(is.$$.fragment,e),b(_e.$$.fragment,e),b(us.$$.fragment,e),b(ps.$$.fragment,e),b(ds.$$.fragment,e),b(cs.$$.fragment,e),b(ms.$$.fragment,e),b(fs.$$.fragment,e),b(hs.$$.fragment,e),b(gs.$$.fragment,e),b(vs.$$.fragment,e),b(xs.$$.fragment,e),b(bs.$$.fragment,e),b(ye.$$.fragment,e),Ma=!0)},o(e){_(f.$$.fragment,e),_(y.$$.fragment,e),_(Pe.$$.fragment,e),_(ke.$$.fragment,e),_(Ne.$$.fragment,e),_(Se.$$.fragment,e),_(Le.$$.fragment,e),_(fe.$$.fragment,e),_(Ge.$$.fragment,e),_(He.$$.fragment,e),_(Ue.$$.fragment,e),_(Ve.$$.fragment,e),_(Fe.$$.fragment,e),_(Je.$$.fragment,e),_(We.$$.fragment,e),_(Ke.$$.fragment,e),_(ve.$$.fragment,e),_(ss.$$.fragment,e),_(ts.$$.fragment,e),_(xe.$$.fragment,e),_(as.$$.fragment,e),_(ns.$$.fragment,e),_(rs.$$.fragment,e),_(ls.$$.fragment,e),_(os.$$.fragment,e),_(is.$$.fragment,e),_(_e.$$.fragment,e),_(us.$$.fragment,e),_(ps.$$.fragment,e),_(ds.$$.fragment,e),_(cs.$$.fragment,e),_(ms.$$.fragment,e),_(fs.$$.fragment,e),_(hs.$$.fragment,e),_(gs.$$.fragment,e),_(vs.$$.fragment,e),_(xs.$$.fragment,e),_(bs.$$.fragment,e),_(ye.$$.fragment,e),Ma=!1},d(e){t(p),e&&t(I),e&&t(h),$(f),e&&t(j),$(y,e),e&&t(A),e&&t(k),e&&t(De),e&&t(L),e&&t(Dt),$(Pe,e),e&&t(Pt),e&&t(X),e&&t(Ct),e&&t(oe),$(ke),e&&t(kt),e&&t(R),e&&t(It),$(Ne,e),e&&t(Tt),e&&t(me),e&&t(Ot),$(Se,e),e&&t(Mt),$(Le,e),e&&t(Rt),e&&t(ys),e&&t(Nt),$(fe,e),e&&t(St),e&&t(Es),e&&t(Lt),$(Ge,e),e&&t(Gt),$(He,e),e&&t(Ht),e&&t(ws),e&&t(Ut),e&&t(ie),$(Ue),e&&t(Bt),e&&t(ee),e&&t(Vt),$(Ve,e),e&&t(Ft),e&&t(ge),e&&t(Jt),$(Fe,e),e&&t(Wt),$(Je,e),e&&t(Kt),e&&t(W),e&&t(Yt),$(We,e),e&&t(Zt),$(Ke,e),e&&t(Qt),e&&t(qs),e&&t(Xt),$(ve,e),e&&t(ea),e&&t(G),e&&t(sa),e&&t(S),e&&t(ta),$(ss,e),e&&t(aa),$(ts,e),e&&t(na),e&&t(K),e&&t(ra),$(xe,e),e&&t(la),e&&t(ue),$(as),e&&t(oa),e&&t(se),e&&t(ia),$(ns,e),e&&t(ua),e&&t(H),e&&t(pa),$(rs,e),e&&t(da),$(ls,e),e&&t(ca),e&&t(te),e&&t(ma),$(os,e),e&&t(fa),$(is,e),e&&t(ha),$(_e,e),e&&t(ga),e&&t(Y),e&&t(va),$(us,e),e&&t(xa),$(ps,e),e&&t(ba),e&&t(Z),e&&t(_a),$(ds,e),e&&t($a),$(cs,e),e&&t(ja),e&&t($e),e&&t(ya),$(ms,e),e&&t(Ea),e&&t(U),e&&t(wa),$(fs,e),e&&t(qa),$(hs,e),e&&t(Aa),e&&t(je),e&&t(za),$(gs,e),e&&t(Da),$(vs,e),e&&t(Pa),e&&t(ae),e&&t(Ca),e&&t(zs),e&&t(ka),$(xs,e),e&&t(Ia),$(bs,e),e&&t(Ta),$(ye,e),e&&t(Oa),e&&t(Ds)}}}const Wo={local:"donnes-massives-datasets-la-rescousse",sections:[{local:"questce-que-the-pile",title:"Qu'est-ce que *The Pile* ?"},{local:"la-magie-du-memory-mapping",title:"La magie du *memory mapping*"},{local:"jeux-de-donnes-en-continu",title:"Jeux de donn\xE9es en continu"}],title:"Donn\xE9es massives ? \u{1F917} *Datasets* \xE0 la rescousse !"};function Ko(F){return So(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class ti extends Oo{constructor(p){super();Mo(this,p,Ko,Jo,Ro,{})}}export{ti as default,Wo as metadata};
