<!-- DISABLE-FRONTMATTER-SECTIONS -->

# 단원 마무리 퀴즈

<CourseFloatingBanner
    chapter={8}
    classNames="absolute z-10 right-0 top-0"
/>

이 챕터에서 배운 내용을 테스트해 봅시다!

### 1. 파이썬 traceback을 어떤 순서로 읽어야 할까요?

<Question
	choices={[
		{
			text: "위에서 아래로",
			explain: "다시 풀어보세요. -- 대부분의 다른 프로그래밍 언어는 맨 위에 예외를 인쇄하지만 Python은 이 점에서 특별합니다."
		},
		{
			text: "아래에서 위로",
			explain: "정답! 맨 아래에 예외를 표시하는 Python traceback의 장점 중 하나는 터미널에서 작업할 때 디버그하기가 더 쉽고 마지막 줄에 표시된다는 점입니다.",
			correct: true
		}
	]}
/>

### 2. 최소한의 재현 가능한 예는 무엇일까요?

<Question
	choices={[
		{
			text: "리서치 기사를 통해 Transformer 아키텍처를 간단하게 구현하는 것 ",
			explain: "자신만의 Transformer 모델을 처음부터 구현하는 것이 매우 교육적이지만 여기에서 이야기하는 내용은 아닙니다."
		},
		{
			text: "비공개 파일이나 데이터에 대한 외부 종속성 없이 실행할 수 있는 작고 완성된 코드 블록",
			explain: "정답! 최소한의 재현 가능한 예제는 라이브러리 메인테이너가 문제를 재현하는 데 도움이 되므로 솔루션을 더 빨리 찾을 수 있습니다.",
			correct: true
		},
		{
			text: "파이썬 traceback의 스크린 샷",
			explain: "다시 풀어보세요. -- 문제를 제출할 때 직면한 에러의 스크린샷을 포함하고 싶겠지만 이렇게 하면 다른 사람이 에러를 재현하기가 매우 어렵습니다."
		},
		{
			text: "에러와 관련 없는 부분을 포함하여 전체 분석이 포함된 노트북",
			explain: "정답은 아닙니다. 에러를 표시하는 Google Colab 노트북을 공유하는 것이 도움이 될 수 있지만 짧고 관련 코드만 포함해야 합니다."
		}
	]}
/>

### 3. 에러가 발생하는 다음 코드를 실행하려고 한다고 가정합니다.:

```py
from transformers import GPT3ForSequenceClassification

# ImportError: cannot import name 'GPT3ForSequenceClassification' from 'transformers' (/Users/lewtun/miniconda3/envs/huggingface/lib/python3.8/site-packages/transformers/__init__.py)
# ---------------------------------------------------------------------------
# ImportError                               Traceback (most recent call last)
# /var/folders/28/k4cy5q7s2hs92xq7_h89_vgm0000gn/T/ipykernel_30848/333858878.py in <module>
# ----> 1 from transformers import GPT3ForSequenceClassification

# ImportError: cannot import name 'GPT3ForSequenceClassification' from 'transformers' (/Users/lewtun/miniconda3/envs/huggingface/lib/python3.8/site-packages/transformers/__init__.py)
```

다음 중 도움을 요청하기 위한 포럼 게시글의 제목으로 적합한 것은 무엇일까요?

<Question
	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: true
		},
		{
			text: "🤗 Transformers에서 GPT-3가 지원되나요?",
			explain: "잘했습니다! 질문을 주제 제목으로 사용하는 것은 문제를 커뮤니티에 전달하는 좋은 방법입니다.",
			correct: true
		}
	]}
/>

### 4. `trainer.train()`을 실행하려고 시도했는데 정확히 어디서 에러가 발생했는지 알려주지 않는 알 수 없는 에러에 직면했다고 가정합니다. 다음 중 학습 파이프라인에서 에러를 찾아야 하는 첫 번째 위치는 어디일까요?

<Question
	choices={[
		{
			text: "그래디언트를 계산하고 역전파를 수행하는 최적화 단계",
			explain: "옵티마이저에 버그가 있을 수 있지만 이것은 일반적으로 학습 파이프라인의 여러 단계이므로 먼저 확인해야 할 다른 사항이 있습니다. 다시 풀어보세요!"
		},
		{
			text: "메트릭을 계산하는 평가 단계",
			explain: "평가는 일반적으로 전체 epoch에 대한 학습 후에 수행하는 작업이므로 학습 파이프라인의 초기 부분에서 먼저 확인해야 합니다.",
		},
		{
			text: "데이터셋",
			explain: "정답! 텍스트가 적절하게 인코딩되었는지, 예상되는 기능이 있는지 등을 확인하기 위해 거의 항상 데이터를 살펴보는 것이 가장 먼저 해야 할 일입니다.",
			correct: true
		},
		{
			text: "데이터 로더",
			explain: "다시 풀어보세요. 가장 먼저 확인해야 할 사항과 매우 비슷합니다. 데이터 로더에 어떤 개체를 전달했는지 기억하시나요?"
		}
	]}
/>

### 5. CUDA 에러를 디버그하는 최고의 방법은 무엇일까요?

<Question
	choices={[
		{
			text: "포럼이나 GitHub에 에러 메시지를 게시하기.",
			explain: "CUDA 오류 메시지는 일반적으로 정보가 매우 없기 때문에 누구에게도 도움이 되지 않습니다."
		},
		{
			text: "CPU에서 같은 코드로 실행하기",
			explain: "정답!, CPU에서 실행하면 더 정확한 에러 메세지를 받을 수 있습니다!",
			correct: true
		},
		{
			text: "Traceback을 읽고 에러의 원인을 찾기.",
			explain: "다른 에러에 대해 수행하는 작업이지만 대부분의 CUDA 작업은 비동기식이므로 CUDA 에러는 일반적으로 해당 위치에서 발생하지 않습니다."
		},
		{
			text: "배치 사이즈 줄여보기",
			explain: "배치 크기를 줄이는 것은 일반적으로 CUDA 메모리 부족 에러를 처리하는 데 좋은 전략이지만 이 특정 문제에는 그렇지 않습니다. 다시 풀어보세요!"
		},
		{
			text: "주피터 커널 재시작하기",
			explain: "다시 풀어보세요. 커널을 다시 시작해도 에러가 사라지지 않습니다!",
		}
	]}
/>

### 6. GitHub에서 문제를 해결하는 가장 좋은 방법은 무엇일까요?

<Question
	choices={[
		{
			text: "버그의 전체 재현 가능한 예를 게시하기.",
			explain: "정답!, 메인테이너가 버그를 찾는 데 도움이 되는 가장 좋은 방법입니다. 또 무엇을 더 할 수 있을까요?",
			correct: true
		},
		{
			text: "매일 업데이트 요청하기",
			explain: "여러분에게 도움을 줄 것 같지 않습니다. 사람들은 아마 당신을 더 무시할 겁니다.",
		},
		{
			text: "버그 주변의 소스 코드를 검사하고 버그가 발생하는 이유를 찾아서 문제의 결과를 게시하기.",
			explain: "분명히 메인테이너에게 도움이 될 것입니다! 그리고 버그의 원인과 수정 사항을 찾으면 풀 리퀘스트를 열 수도 있습니다. 또 무엇을 더 할 수 있을까요?",
			correct: true
		}
	]}
/>

### 7. 하나의 배치에 과적합하는 것이 일반적으로 좋은 디버깅 기술인 이유는 무엇일까요?

<Question
	choices={[
		{
			text: "그렇지 않습니다. 과적합은 항상 좋지 않으며 피해야 합니다.",
			explain: "전체 데이터 세트에 대해 학습할 때 과적합은 실제로 모델이 새로운 예에 잘 일반화되지 않는다는 신호일 수 있습니다. 그러나 디버깅을 위해 일반적으로 전체 데이터 세트에 대해 학습하지는 않습니다. 다시 풀어보세요!"
		},
		{
			text: "모델이 손실을 0으로 줄일 수 있는지 확인할 수 있습니다.",
			explain: "정답! 예가 두 개밖에 안 되는 작은 배치로 모델이 학습할 수 있는지 빠르게 확인할 수 있습니다.",
			correct: true
		},
		{
			text: "이를 통해 입력 및 레이블의 텐서 모양이 올바른지 확인할 수 있습니다.",
			explain: "다시 풀어보세요. 텐서 모양이 잘못 정렬되면 단일 배치에서도 훈련할 수 없습니다.",
		}
	]}
/>

### 8. 🤗 Transformers 저장소에서 새 이슈를 생성할 때 `transformers-cli env`를 사용하여 컴퓨팅 환경에 대한 세부 정보를 포함하는 것이 좋은 이유는 무엇일까요?

<Question
	choices={[
		{
			text: "이를 통해 메인테이너는 사용 중인 라이브러리의 버전을 이해할 수 있습니다.",
			explain: "정답! 라이브러리의 각 주요 버전은 API에 변경 사항이 있을 수 있으므로 사용 중인 특정 버전을 알면 문제를 좁히는 데 도움이 될 수 있습니다. 다른 이점은 무엇이 있을까요?",
			correct: true
		},
		{
			text: "이를 통해 메인테이너는 Windows, macOS 또는 Linux에서 코드를 실행 중인지 여부를 알 수 있습니다.",
			explain: "정답! 사용 중인 특정 운영 체제로 인해 때때로 오류가 발생할 수 있으며 이를 알고 있으면 메인테이너가 에러를 로컬에서 재현하는 데 도움이 됩니다. 하지만 그게 유일한 이유는 아닙니다.",
			correct: true
		},
		{
			text: "이를 통해 메인테이너는 코드를 GPU에서 실행하는지 CPU에서 실행하는지 알 수 있습니다.",
			explain: "정답! 이 장에서 살펴본 것처럼 GPU 또는 CPU에서 실행되는 코드는 다른 결과 또는 오류를 생성할 수 있으며 사용 중인 하드웨어를 알면 메인테이너의 주의를 집중하는 데 도움이 될 수 있습니다. 하지만 이점은 이뿐만이 아닙니다...",
			correct: true
		}
	]}
/>
