Este repositório contém a reprodução do zero do nanoGPT. Os commits do git foram especificamente mantidos passo a passo e limpos para que seja possível percorrer facilmente o histórico de commits do git para vê-lo construído lentamente. Além disso, há uma palestra em vídeo no YouTube onde você pode me ver apresentando cada commit e explicando as peças ao longo do caminho.
Basicamente partimos de um arquivo vazio e chegamos a uma reprodução do modelo GPT-2 (124M). Se você tiver mais paciência ou dinheiro, o código também pode reproduzir os modelos GPT-3. Embora o modelo GPT-2 (124M) provavelmente tenha sido treinado há algum tempo (2019, cerca de 5 anos atrás), hoje, reproduzi-lo é uma questão de aproximadamente 1 hora e aproximadamente US$ 10. Você precisará de uma caixa GPU em nuvem se não tiver o suficiente, para isso recomendo o Lambda.
Observe que GPT-2 e GPT-3 e ambos modelos de linguagem simples, treinados em documentos da Internet, e tudo o que fazem são documentos da Internet "dos sonhos". Portanto, este repositório/vídeo não cobre o ajuste fino do bate-papo e você não pode falar com ele como fala com o ChatGPT. O processo de ajuste fino (embora conceitualmente bastante simples - SFT trata apenas de trocar o conjunto de dados e continuar o treinamento) vem depois desta parte e será abordado posteriormente. Por enquanto, esse é o tipo de coisa que o modelo 124M diz se você perguntar "Olá, sou um modelo de linguagem", após 10B tokens de treinamento:
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
E depois de 40 bilhões de tokens de treinamento:
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
Lol. De qualquer forma, assim que o vídeo for lançado, este também será um local para perguntas frequentes, e um local para correções e erratas, das quais tenho certeza que haverá várias :)
Para discussões e dúvidas, use a aba Discussões, e para uma comunicação mais rápida, dê uma olhada no meu Zero To Hero Discord, canal #nanoGPT :
Vamos reproduzir a palestra do YouTube sobre GPT-2 (124M)
Pequena limpeza, esquecemos de excluir o register_buffer
do preconceito assim que mudamos para a atenção do flash, corrigido com um PR recente.
A versão anterior do PyTorch pode ter dificuldade na conversão de uint16 para long. Dentro de load_tokens
, adicionamos npt = npt.astype(np.int32)
para usar numpy para converter uint16 em int32 antes de converter para tensor de tocha e depois converter para long.
A função torch.autocast
leva um arg device_type
, para o qual tentei teimosamente apenas passar device
esperando que funcionasse bem, mas o PyTorch realmente quer apenas o tipo e cria erros em alguma versão do PyTorch. Então, queremos, por exemplo, que o dispositivo cuda:3
seja despojado de cuda
. Atualmente, mps
do dispositivo (Apple Silicon) se tornariam CPU device_type
, não tenho 100% de certeza de que esse seja o método PyTorch pretendido.
Confusamente, model.require_backward_grad_sync
é realmente usado tanto pela passagem para frente quanto para trás. Movido para cima na linha para que também seja aplicado ao passe para frente.
Para execuções de nível de produção muito semelhantes ao nanoGPT, recomendo consultar os seguintes repositórios:
MIT