Buckets:

rtrm's picture
download
raw
19.1 kB
import{s as bt,n as yt,o as jt}from"../chunks/scheduler.37c15a92.js";import{S as Jt,i as Tt,g as Y,s as a,r as s,A as Zt,h as d,f as n,c as l,j as Mt,u as m,x as gt,k as xt,y as Ut,a as r,v as i,d as p,t as $,w as f}from"../chunks/index.2bf4358c.js";import{C as wt}from"../chunks/CodeBlock.4e987730.js";import{C as ht}from"../chunks/CourseFloatingBanner.9ff4c771.js";import{Q as u}from"../chunks/Question.668688bc.js";import{H as c,E as St}from"../chunks/getInferenceSnippets.1837c472.js";function At(ot){let o,v,B,N,M,R,g,I,x,ct="이 챕터에서 배운 내용을 테스트해 봅시다!",q,b,H,y,F,j,V,J,E,T,Q,Z,D,U,ut="다음 중 도움을 요청하기 위한 포럼 게시글의 제목으로 적합한 것은 무엇일까요?",O,w,K,h,tt,S,et,A,nt,k,rt,C,at,G,lt,z,st,_,mt,L,it,X,pt,W,$t,P,ft;return M=new c({props:{title:"단원 마무리 퀴즈",local:"단원-마무리-퀴즈",headingTag:"h1"}}),g=new ht({props:{chapter:8,classNames:"absolute z-10 right-0 top-0"}}),b=new c({props:{title:"1. 파이썬 traceback을 어떤 순서로 읽어야 할까요?",local:"1-파이썬-traceback을-어떤-순서로-읽어야-할까요",headingTag:"h3"}}),y=new u({props:{choices:[{text:"위에서 아래로",explain:"다시 풀어보세요. -- 대부분의 다른 프로그래밍 언어는 맨 위에 예외를 인쇄하지만 Python은 이 점에서 특별합니다."},{text:"아래에서 위로",explain:"정답! 맨 아래에 예외를 표시하는 Python traceback의 장점 중 하나는 터미널에서 작업할 때 디버그하기가 더 쉽고 마지막 줄에 표시된다는 점입니다.",correct:!0}]}}),j=new c({props:{title:"2. 최소한의 재현 가능한 예는 무엇일까요?",local:"2-최소한의-재현-가능한-예는-무엇일까요",headingTag:"h3"}}),J=new u({props:{choices:[{text:"리서치 기사를 통해 Transformer 아키텍처를 간단하게 구현하는 것 ",explain:"자신만의 Transformer 모델을 처음부터 구현하는 것이 매우 교육적이지만 여기에서 이야기하는 내용은 아닙니다."},{text:"비공개 파일이나 데이터에 대한 외부 종속성 없이 실행할 수 있는 작고 완성된 코드 블록",explain:"정답! 최소한의 재현 가능한 예제는 라이브러리 메인테이너가 문제를 재현하는 데 도움이 되므로 솔루션을 더 빨리 찾을 수 있습니다.",correct:!0},{text:"파이썬 traceback의 스크린 샷",explain:"다시 풀어보세요. -- 문제를 제출할 때 직면한 에러의 스크린샷을 포함하고 싶겠지만 이렇게 하면 다른 사람이 에러를 재현하기가 매우 어렵습니다."},{text:"에러와 관련 없는 부분을 포함하여 전체 분석이 포함된 노트북",explain:"정답은 아닙니다. 에러를 표시하는 Google Colab 노트북을 공유하는 것이 도움이 될 수 있지만 짧고 관련 코드만 포함해야 합니다."}]}}),T=new c({props:{title:"3. 에러가 발생하는 다음 코드를 실행하려고 한다고 가정합니다.:",local:"3-에러가-발생하는-다음-코드를-실행하려고-한다고-가정합니다",headingTag:"h3"}}),Z=new wt({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEdQVDNGb3JTZXF1ZW5jZUNsYXNzaWZpY2F0aW9uJTBBJTBBJTIzJTIwSW1wb3J0RXJyb3IlM0ElMjBjYW5ub3QlMjBpbXBvcnQlMjBuYW1lJTIwJ0dQVDNGb3JTZXF1ZW5jZUNsYXNzaWZpY2F0aW9uJyUyMGZyb20lMjAndHJhbnNmb3JtZXJzJyUyMCglMkZVc2VycyUyRmxld3R1biUyRm1pbmljb25kYTMlMkZlbnZzJTJGaHVnZ2luZ2ZhY2UlMkZsaWIlMkZweXRob24zLjglMkZzaXRlLXBhY2thZ2VzJTJGdHJhbnNmb3JtZXJzJTJGX19pbml0X18ucHkpJTBBJTIzJTIwLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJTBBJTIzJTIwSW1wb3J0RXJyb3IlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBUcmFjZWJhY2slMjAobW9zdCUyMHJlY2VudCUyMGNhbGwlMjBsYXN0KSUwQSUyMyUyMCUyRnZhciUyRmZvbGRlcnMlMkYyOCUyRms0Y3k1cTdzMmhzOTJ4cTdfaDg5X3ZnbTAwMDBnbiUyRlQlMkZpcHlrZXJuZWxfMzA4NDglMkYzMzM4NTg4NzgucHklMjBpbiUyMCUzQ21vZHVsZSUzRSUwQSUyMyUyMC0tLS0lM0UlMjAxJTIwZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEdQVDNGb3JTZXF1ZW5jZUNsYXNzaWZpY2F0aW9uJTBBJTBBJTIzJTIwSW1wb3J0RXJyb3IlM0ElMjBjYW5ub3QlMjBpbXBvcnQlMjBuYW1lJTIwJ0dQVDNGb3JTZXF1ZW5jZUNsYXNzaWZpY2F0aW9uJyUyMGZyb20lMjAndHJhbnNmb3JtZXJzJyUyMCglMkZVc2VycyUyRmxld3R1biUyRm1pbmljb25kYTMlMkZlbnZzJTJGaHVnZ2luZ2ZhY2UlMkZsaWIlMkZweXRob24zLjglMkZzaXRlLXBhY2thZ2VzJTJGdHJhbnNmb3JtZXJzJTJGX19pbml0X18ucHkp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> GPT3ForSequenceClassification
<span class="hljs-comment"># ImportError: cannot import name &#x27;GPT3ForSequenceClassification&#x27; from &#x27;transformers&#x27; (/Users/lewtun/miniconda3/envs/huggingface/lib/python3.8/site-packages/transformers/__init__.py)</span>
<span class="hljs-comment"># ---------------------------------------------------------------------------</span>
<span class="hljs-comment"># ImportError Traceback (most recent call last)</span>
<span class="hljs-comment"># /var/folders/28/k4cy5q7s2hs92xq7_h89_vgm0000gn/T/ipykernel_30848/333858878.py in &lt;module&gt;</span>
<span class="hljs-comment"># ----&gt; 1 from transformers import GPT3ForSequenceClassification</span>
<span class="hljs-comment"># ImportError: cannot import name &#x27;GPT3ForSequenceClassification&#x27; from &#x27;transformers&#x27; (/Users/lewtun/miniconda3/envs/huggingface/lib/python3.8/site-packages/transformers/__init__.py)</span>`,wrap:!1}}),w=new u({props:{choices:[{text:"<code>ImportError: cannot import name 'GPT3ForSequenceClassification' from 'transformers' (/Users/lewtun/miniconda3/envs/huggingface/lib/python3.8/site-packages/transformers/__init__.py)</code>",explain:"Traceback의 마지막 줄을 포함하는 것은 설명적일 수 있지만 주제의 본문에 더 적합합니다. 다시 풀어보세요!"},{text:"문제가 있습니다. <code>from transformers import GPT3ForSequenceClassification</code>",explain:"다시 풀어보세요. 유용한 정보를 제공하지만 텍스트의 본문용으로 사용하는 것이 가장 좋습니다."},{text:"왜 <code>GPT3ForSequenceClassification</code> import가 안될까요? ?",explain:"훌륭한 선택입니다! 이 제목은 간결하고 독자에게 무엇이 잘못되었는지에 대한 단서를 제공합니다(GPT-3는 🤗 트랜스포머에서 지원되지 않음).",correct:!0},{text:"🤗 Transformers에서 GPT-3가 지원되나요?",explain:"잘했습니다! 질문을 주제 제목으로 사용하는 것은 문제를 커뮤니티에 전달하는 좋은 방법입니다.",correct:!0}]}}),h=new c({props:{title:"4. trainer.train() 을 실행하려고 시도했는데 정확히 어디서 에러가 발생했는지 알려주지 않는 알 수 없는 에러에 직면했다고 가정합니다. 다음 중 학습 파이프라인에서 에러를 찾아야 하는 첫 번째 위치는 어디일까요?",local:"4-trainertrain-을-실행하려고-시도했는데-정확히-어디서-에러가-발생했는지-알려주지-않는-알-수-없는-에러에-직면했다고-가정합니다-다음-중-학습-파이프라인에서-에러를-찾아야-하는-첫-번째-위치는-어디일까요",headingTag:"h3"}}),S=new u({props:{choices:[{text:"그래디언트를 계산하고 역전파를 수행하는 최적화 단계",explain:"옵티마이저에 버그가 있을 수 있지만 이것은 일반적으로 학습 파이프라인의 여러 단계이므로 먼저 확인해야 할 다른 사항이 있습니다. 다시 풀어보세요!"},{text:"메트릭을 계산하는 평가 단계",explain:"평가는 일반적으로 전체 epoch에 대한 학습 후에 수행하는 작업이므로 학습 파이프라인의 초기 부분에서 먼저 확인해야 합니다."},{text:"데이터셋",explain:"정답! 텍스트가 적절하게 인코딩되었는지, 예상되는 기능이 있는지 등을 확인하기 위해 거의 항상 데이터를 살펴보는 것이 가장 먼저 해야 할 일입니다.",correct:!0},{text:"데이터 로더",explain:"다시 풀어보세요. 가장 먼저 확인해야 할 사항과 매우 비슷합니다. 데이터 로더에 어떤 개체를 전달했는지 기억하시나요?"}]}}),A=new c({props:{title:"5. CUDA 에러를 디버그하는 최고의 방법은 무엇일까요?",local:"5-cuda-에러를-디버그하는-최고의-방법은-무엇일까요",headingTag:"h3"}}),k=new u({props:{choices:[{text:"포럼이나 GitHub에 에러 메시지를 게시하기.",explain:"CUDA 오류 메시지는 일반적으로 정보가 매우 없기 때문에 누구에게도 도움이 되지 않습니다."},{text:"CPU에서 같은 코드로 실행하기",explain:"정답!, CPU에서 실행하면 더 정확한 에러 메세지를 받을 수 있습니다!",correct:!0},{text:"Traceback을 읽고 에러의 원인을 찾기.",explain:"다른 에러에 대해 수행하는 작업이지만 대부분의 CUDA 작업은 비동기식이므로 CUDA 에러는 일반적으로 해당 위치에서 발생하지 않습니다."},{text:"배치 사이즈 줄여보기",explain:"배치 크기를 줄이는 것은 일반적으로 CUDA 메모리 부족 에러를 처리하는 데 좋은 전략이지만 이 특정 문제에는 그렇지 않습니다. 다시 풀어보세요!"},{text:"주피터 커널 재시작하기",explain:"다시 풀어보세요. 커널을 다시 시작해도 에러가 사라지지 않습니다!"}]}}),C=new c({props:{title:"6. GitHub에서 문제를 해결하는 가장 좋은 방법은 무엇일까요?",local:"6-github에서-문제를-해결하는-가장-좋은-방법은-무엇일까요",headingTag:"h3"}}),G=new u({props:{choices:[{text:"버그의 전체 재현 가능한 예를 게시하기.",explain:"정답!, 메인테이너가 버그를 찾는 데 도움이 되는 가장 좋은 방법입니다. 또 무엇을 더 할 수 있을까요?",correct:!0},{text:"매일 업데이트 요청하기",explain:"여러분에게 도움을 줄 것 같지 않습니다. 사람들은 아마 당신을 더 무시할 겁니다."},{text:"버그 주변의 소스 코드를 검사하고 버그가 발생하는 이유를 찾아서 문제의 결과를 게시하기.",explain:"분명히 메인테이너에게 도움이 될 것입니다! 그리고 버그의 원인과 수정 사항을 찾으면 풀 리퀘스트를 열 수도 있습니다. 또 무엇을 더 할 수 있을까요?",correct:!0}]}}),z=new c({props:{title:"7. 하나의 배치에 과적합하는 것이 일반적으로 좋은 디버깅 기술인 이유는 무엇일까요?",local:"7-하나의-배치에-과적합하는-것이-일반적으로-좋은-디버깅-기술인-이유는-무엇일까요",headingTag:"h3"}}),_=new u({props:{choices:[{text:"그렇지 않습니다. 과적합은 항상 좋지 않으며 피해야 합니다.",explain:"전체 데이터 세트에 대해 학습할 때 과적합은 실제로 모델이 새로운 예에 잘 일반화되지 않는다는 신호일 수 있습니다. 그러나 디버깅을 위해 일반적으로 전체 데이터 세트에 대해 학습하지는 않습니다. 다시 풀어보세요!"},{text:"모델이 손실을 0으로 줄일 수 있는지 확인할 수 있습니다.",explain:"정답! 예가 두 개밖에 안 되는 작은 배치로 모델이 학습할 수 있는지 빠르게 확인할 수 있습니다.",correct:!0},{text:"이를 통해 입력 및 레이블의 텐서 모양이 올바른지 확인할 수 있습니다.",explain:"다시 풀어보세요. 텐서 모양이 잘못 정렬되면 단일 배치에서도 훈련할 수 없습니다."}]}}),L=new c({props:{title:"8. 🤗 Transformers 저장소에서 새 이슈를 생성할 때 transformers-cli env 를 사용하여 컴퓨팅 환경에 대한 세부 정보를 포함하는 것이 좋은 이유는 무엇일까요?",local:"8--transformers-저장소에서-새-이슈를-생성할-때-transformers-cli-env-를-사용하여-컴퓨팅-환경에-대한-세부-정보를-포함하는-것이-좋은-이유는-무엇일까요",headingTag:"h3"}}),X=new u({props:{choices:[{text:"이를 통해 메인테이너는 사용 중인 라이브러리의 버전을 이해할 수 있습니다.",explain:"정답! 라이브러리의 각 주요 버전은 API에 변경 사항이 있을 수 있으므로 사용 중인 특정 버전을 알면 문제를 좁히는 데 도움이 될 수 있습니다. 다른 이점은 무엇이 있을까요?",correct:!0},{text:"이를 통해 메인테이너는 Windows, macOS 또는 Linux에서 코드를 실행 중인지 여부를 알 수 있습니다.",explain:"정답! 사용 중인 특정 운영 체제로 인해 때때로 오류가 발생할 수 있으며 이를 알고 있으면 메인테이너가 에러를 로컬에서 재현하는 데 도움이 됩니다. 하지만 그게 유일한 이유는 아닙니다.",correct:!0},{text:"이를 통해 메인테이너는 코드를 GPU에서 실행하는지 CPU에서 실행하는지 알 수 있습니다.",explain:"정답! 이 장에서 살펴본 것처럼 GPU 또는 CPU에서 실행되는 코드는 다른 결과 또는 오류를 생성할 수 있으며 사용 중인 하드웨어를 알면 메인테이너의 주의를 집중하는 데 도움이 될 수 있습니다. 하지만 이점은 이뿐만이 아닙니다...",correct:!0}]}}),W=new St({props:{source:"https://github.com/huggingface/course/blob/main/chapters/ko/chapter8/7.mdx"}}),{c(){o=Y("meta"),v=a(),B=Y("p"),N=a(),s(M.$$.fragment),R=a(),s(g.$$.fragment),I=a(),x=Y("p"),x.textContent=ct,q=a(),s(b.$$.fragment),H=a(),s(y.$$.fragment),F=a(),s(j.$$.fragment),V=a(),s(J.$$.fragment),E=a(),s(T.$$.fragment),Q=a(),s(Z.$$.fragment),D=a(),U=Y("p"),U.textContent=ut,O=a(),s(w.$$.fragment),K=a(),s(h.$$.fragment),tt=a(),s(S.$$.fragment),et=a(),s(A.$$.fragment),nt=a(),s(k.$$.fragment),rt=a(),s(C.$$.fragment),at=a(),s(G.$$.fragment),lt=a(),s(z.$$.fragment),st=a(),s(_.$$.fragment),mt=a(),s(L.$$.fragment),it=a(),s(X.$$.fragment),pt=a(),s(W.$$.fragment),$t=a(),P=Y("p"),this.h()},l(t){const e=Zt("svelte-u9bgzb",document.head);o=d(e,"META",{name:!0,content:!0}),e.forEach(n),v=l(t),B=d(t,"P",{}),Mt(B).forEach(n),N=l(t),m(M.$$.fragment,t),R=l(t),m(g.$$.fragment,t),I=l(t),x=d(t,"P",{"data-svelte-h":!0}),gt(x)!=="svelte-v6aq2o"&&(x.textContent=ct),q=l(t),m(b.$$.fragment,t),H=l(t),m(y.$$.fragment,t),F=l(t),m(j.$$.fragment,t),V=l(t),m(J.$$.fragment,t),E=l(t),m(T.$$.fragment,t),Q=l(t),m(Z.$$.fragment,t),D=l(t),U=d(t,"P",{"data-svelte-h":!0}),gt(U)!=="svelte-1bxdwnm"&&(U.textContent=ut),O=l(t),m(w.$$.fragment,t),K=l(t),m(h.$$.fragment,t),tt=l(t),m(S.$$.fragment,t),et=l(t),m(A.$$.fragment,t),nt=l(t),m(k.$$.fragment,t),rt=l(t),m(C.$$.fragment,t),at=l(t),m(G.$$.fragment,t),lt=l(t),m(z.$$.fragment,t),st=l(t),m(_.$$.fragment,t),mt=l(t),m(L.$$.fragment,t),it=l(t),m(X.$$.fragment,t),pt=l(t),m(W.$$.fragment,t),$t=l(t),P=d(t,"P",{}),Mt(P).forEach(n),this.h()},h(){xt(o,"name","hf:doc:metadata"),xt(o,"content",kt)},m(t,e){Ut(document.head,o),r(t,v,e),r(t,B,e),r(t,N,e),i(M,t,e),r(t,R,e),i(g,t,e),r(t,I,e),r(t,x,e),r(t,q,e),i(b,t,e),r(t,H,e),i(y,t,e),r(t,F,e),i(j,t,e),r(t,V,e),i(J,t,e),r(t,E,e),i(T,t,e),r(t,Q,e),i(Z,t,e),r(t,D,e),r(t,U,e),r(t,O,e),i(w,t,e),r(t,K,e),i(h,t,e),r(t,tt,e),i(S,t,e),r(t,et,e),i(A,t,e),r(t,nt,e),i(k,t,e),r(t,rt,e),i(C,t,e),r(t,at,e),i(G,t,e),r(t,lt,e),i(z,t,e),r(t,st,e),i(_,t,e),r(t,mt,e),i(L,t,e),r(t,it,e),i(X,t,e),r(t,pt,e),i(W,t,e),r(t,$t,e),r(t,P,e),ft=!0},p:yt,i(t){ft||(p(M.$$.fragment,t),p(g.$$.fragment,t),p(b.$$.fragment,t),p(y.$$.fragment,t),p(j.$$.fragment,t),p(J.$$.fragment,t),p(T.$$.fragment,t),p(Z.$$.fragment,t),p(w.$$.fragment,t),p(h.$$.fragment,t),p(S.$$.fragment,t),p(A.$$.fragment,t),p(k.$$.fragment,t),p(C.$$.fragment,t),p(G.$$.fragment,t),p(z.$$.fragment,t),p(_.$$.fragment,t),p(L.$$.fragment,t),p(X.$$.fragment,t),p(W.$$.fragment,t),ft=!0)},o(t){$(M.$$.fragment,t),$(g.$$.fragment,t),$(b.$$.fragment,t),$(y.$$.fragment,t),$(j.$$.fragment,t),$(J.$$.fragment,t),$(T.$$.fragment,t),$(Z.$$.fragment,t),$(w.$$.fragment,t),$(h.$$.fragment,t),$(S.$$.fragment,t),$(A.$$.fragment,t),$(k.$$.fragment,t),$(C.$$.fragment,t),$(G.$$.fragment,t),$(z.$$.fragment,t),$(_.$$.fragment,t),$(L.$$.fragment,t),$(X.$$.fragment,t),$(W.$$.fragment,t),ft=!1},d(t){t&&(n(v),n(B),n(N),n(R),n(I),n(x),n(q),n(H),n(F),n(V),n(E),n(Q),n(D),n(U),n(O),n(K),n(tt),n(et),n(nt),n(rt),n(at),n(lt),n(st),n(mt),n(it),n(pt),n($t),n(P)),n(o),f(M,t),f(g,t),f(b,t),f(y,t),f(j,t),f(J,t),f(T,t),f(Z,t),f(w,t),f(h,t),f(S,t),f(A,t),f(k,t),f(C,t),f(G,t),f(z,t),f(_,t),f(L,t),f(X,t),f(W,t)}}}const kt='{"title":"단원 마무리 퀴즈","local":"단원-마무리-퀴즈","sections":[{"title":"1. 파이썬 traceback을 어떤 순서로 읽어야 할까요?","local":"1-파이썬-traceback을-어떤-순서로-읽어야-할까요","sections":[],"depth":3},{"title":"2. 최소한의 재현 가능한 예는 무엇일까요?","local":"2-최소한의-재현-가능한-예는-무엇일까요","sections":[],"depth":3},{"title":"3. 에러가 발생하는 다음 코드를 실행하려고 한다고 가정합니다.:","local":"3-에러가-발생하는-다음-코드를-실행하려고-한다고-가정합니다","sections":[],"depth":3},{"title":"4. trainer.train() 을 실행하려고 시도했는데 정확히 어디서 에러가 발생했는지 알려주지 않는 알 수 없는 에러에 직면했다고 가정합니다. 다음 중 학습 파이프라인에서 에러를 찾아야 하는 첫 번째 위치는 어디일까요?","local":"4-trainertrain-을-실행하려고-시도했는데-정확히-어디서-에러가-발생했는지-알려주지-않는-알-수-없는-에러에-직면했다고-가정합니다-다음-중-학습-파이프라인에서-에러를-찾아야-하는-첫-번째-위치는-어디일까요","sections":[],"depth":3},{"title":"5. CUDA 에러를 디버그하는 최고의 방법은 무엇일까요?","local":"5-cuda-에러를-디버그하는-최고의-방법은-무엇일까요","sections":[],"depth":3},{"title":"6. GitHub에서 문제를 해결하는 가장 좋은 방법은 무엇일까요?","local":"6-github에서-문제를-해결하는-가장-좋은-방법은-무엇일까요","sections":[],"depth":3},{"title":"7. 하나의 배치에 과적합하는 것이 일반적으로 좋은 디버깅 기술인 이유는 무엇일까요?","local":"7-하나의-배치에-과적합하는-것이-일반적으로-좋은-디버깅-기술인-이유는-무엇일까요","sections":[],"depth":3},{"title":"8. 🤗 Transformers 저장소에서 새 이슈를 생성할 때 transformers-cli env 를 사용하여 컴퓨팅 환경에 대한 세부 정보를 포함하는 것이 좋은 이유는 무엇일까요?","local":"8--transformers-저장소에서-새-이슈를-생성할-때-transformers-cli-env-를-사용하여-컴퓨팅-환경에-대한-세부-정보를-포함하는-것이-좋은-이유는-무엇일까요","sections":[],"depth":3}],"depth":1}';function Ct(ot){return jt(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class Bt extends Jt{constructor(o){super(),Tt(this,o,Ct,At,bt,{})}}export{Bt as component};

Xet Storage Details

Size:
19.1 kB
·
Xet hash:
d6cf99aec9920a58c083d8b7c5e990b3d233752d1c85a826db99a428ec258f44

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.