이 저장소에는 nanoGPT의 처음부터 다시 재생산된 내용이 포함되어 있습니다. git 커밋은 구체적으로 단계별로 깔끔하게 유지되어 git 커밋 기록을 쉽게 살펴보고 천천히 빌드된 것을 확인할 수 있습니다. 또한 YouTube에는 각 커밋을 소개하고 그 과정에서 부분을 설명하는 동영상 강의가 있습니다.
기본적으로 빈 파일에서 시작하여 GPT-2(124M) 모델을 재현하는 작업을 진행합니다. 인내심이나 돈이 더 있다면 코드로 GPT-3 모델을 재현할 수도 있습니다. GPT-2(124M) 모델은 아마도 옛날(2019년, ~5년 전) 꽤 오랫동안 훈련을 받았을 것입니다. 그러나 오늘날 이를 재현하는 데는 ~1시간과 ~$10의 문제가 있습니다. 충분하지 않은 경우 클라우드 GPU 상자가 필요합니다. 이를 위해서는 Lambda를 권장합니다.
GPT-2와 GPT-3 그리고 둘 다 인터넷 문서에 대해 훈련된 간단한 언어 모델이며 그들이 하는 일은 모두 "꿈의" 인터넷 문서라는 점에 유의하세요. 따라서 이 저장소/비디오는 채팅 미세 조정을 다루지 않으며 ChatGPT와 대화할 수 있는 것처럼 대화할 수 없습니다. 미세 조정 프로세스(개념적으로는 매우 간단하지만 SFT는 데이터 세트를 교체하고 훈련을 계속하는 것임)는 이 부분 뒤에 나오며 나중에 다루겠습니다. 현재로서는 100억 개의 토큰을 학습한 후 "안녕하세요, 저는 언어 모델입니다"라는 메시지를 표시하면 124M 모델이 말하는 내용입니다.
Hello, I'm a language model, and my goal is to make English as easy and fun as possible for everyone, and to find out the different grammar rules
Hello, I'm a language model, so the next time I go, I'll just say, I like this stuff.
Hello, I'm a language model, and the question is, what should I do if I want to be a teacher?
Hello, I'm a language model, and I'm an English person. In languages, "speak" is really speaking. Because for most people, there's
그리고 400억 개의 훈련 토큰 이후:
Hello, I'm a language model, a model of computer science, and it's a way (in mathematics) to program computer programs to do things like write
Hello, I'm a language model, not a human. This means that I believe in my language model, as I have no experience with it yet.
Hello, I'm a language model, but I'm talking about data. You've got to create an array of data: you've got to create that.
Hello, I'm a language model, and all of this is about modeling and learning Python. I'm very good in syntax, however I struggle with Python due
ㅋㅋㅋ. 어쨌든, 영상이 나오면 이곳은 FAQ를 위한 공간이기도 하고, 수정 사항과 정오표를 위한 공간이기도 합니다. 그 중 상당수가 있을 거라 확신합니다 :)
토론 및 질문이 있는 경우 토론 탭을 사용하고, 더 빠른 의사소통을 위해 Zero To Hero Discord 채널 #nanoGPT 를 살펴보세요.
GPT-2(124M) 유튜브 강의를 재현해보자
사소한 정리, 플래시 어텐션으로 전환한 후 바이어스의 register_buffer
삭제하는 것을 잊었고 최근 PR로 수정되었습니다.
이전 버전의 PyTorch에서는 uint16에서 long으로 변환하는 데 어려움이 있을 수 있습니다. load_tokens
내부에 npt = npt.astype(np.int32)
추가하여 토치 텐서로 변환한 다음 long으로 변환하기 전에 numpy를 사용하여 uint16을 int32로 변환했습니다.
torch.autocast
함수는 arg device_type
취하는데, 저는 device
제대로 작동하기를 바라면서 완고하게 전달하려고 시도했지만, PyTorch는 실제로 그 유형만을 원하고 일부 PyTorch 버전에서 오류를 생성합니다. 그래서 우리는 cuda:3
장치가 cuda
로 제거되기를 원합니다. 현재 장치 mps
(Apple Silicon)는 device_type
CPU가 됩니다. 이것이 의도된 PyTorch 방식인지 100% 확신할 수 없습니다.
혼란스럽게도 model.require_backward_grad_sync
는 실제로 정방향 및 역방향 전달 모두에서 사용됩니다. 전진 패스에도 적용되도록 라인을 위로 올렸습니다.
nanoGPT와 매우 유사한 더 많은 프로덕션 등급 실행을 위해서는 다음 저장소를 살펴보는 것이 좋습니다.
MIT