Este repositorio contiene la reproducción desde cero de nanoGPT. Las confirmaciones de git se mantuvieron específicamente paso a paso y limpias para que uno pueda recorrer fácilmente el historial de confirmaciones de git para verlo construido lentamente. Además, hay una conferencia en video adjunta en YouTube donde puedes verme presentar cada compromiso y explicar las piezas a lo largo del camino.
Básicamente, partimos de un archivo vacío y avanzamos hasta llegar a una reproducción del modelo GPT-2 (124M). Si tienes más paciencia o dinero, el código también puede reproducir los modelos GPT-3. Si bien el modelo GPT-2 (124M) probablemente se entrenó durante bastante tiempo (2019, hace ~5 años), hoy en día, reproducirlo es cuestión de ~1 hora y ~$10. Necesitará una caja de GPU en la nube si no tiene suficiente, para eso recomiendo Lambda.
Tenga en cuenta que GPT-2 y GPT-3 son modelos de lenguaje simple, entrenados en documentos de Internet, y todo lo que hacen es "soñar" documentos de Internet. Entonces, este repositorio/video no cubre el ajuste fino del chat y no puedes hablar con él como puedes hablar con ChatGPT. El proceso de ajuste (aunque conceptualmente es bastante simple: SFT consiste simplemente en intercambiar el conjunto de datos y continuar con el entrenamiento) viene después de esta parte y se cubrirá más adelante. Por ahora, este es el tipo de cosas que dice el modelo 124M si le dices "Hola, soy un modelo de lenguaje", después de 10 mil millones de tokens de entrenamiento:
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
Y después de 40 mil millones de fichas de entrenamiento:
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
Jajaja. De todos modos, una vez que salga el vídeo, este también será un lugar para preguntas frecuentes y un lugar para correcciones y erratas, de las cuales estoy seguro habrá varias :)
Para debates y preguntas, utilice la pestaña Discusiones y, para una comunicación más rápida, eche un vistazo a mi Zero To Hero Discord, canal #nanoGPT :
Reproduzcamos la conferencia de YouTube GPT-2 (124M)
Limpieza menor, nos olvidamos de eliminar register_buffer
del sesgo una vez que cambiamos a la atención flash, solucionado con un PR reciente.
La versión anterior de PyTorch puede tener dificultades para convertir de uint16 a long. Dentro de load_tokens
, agregamos npt = npt.astype(np.int32)
para usar numpy para convertir uint16 a int32 antes de convertirlo a tensor de antorcha y luego convertirlo a largo.
La función torch.autocast
toma un argumento device_type
, al que intenté obstinadamente pasar device
con la esperanza de que funcione bien, pero PyTorch en realidad quiere solo el tipo y crea errores en alguna versión de PyTorch. Entonces queremos, por ejemplo, que el dispositivo cuda:3
se elimine a cuda
. Actualmente, los dispositivos mps
(Apple Silicon) se convertirían en CPU device_type
, no estoy 100% seguro de que esta sea la forma prevista de PyTorch.
De manera confusa, model.require_backward_grad_sync
en realidad se usa tanto en el pase hacia adelante como hacia atrás. Avanzó en la línea para que también se aplique al pase hacia adelante.
Para ejecutar más ejecuciones de producción que sean muy similares a nanoGPT, recomiendo consultar los siguientes repositorios:
MIT