El objetivo de este repositorio es proporcionar una implementación simple de los modelos GPT que se pueden utilizar para aplicaciones de producción. El código actualmente admite los siguientes casos de uso:
Siéntase libre de desembolsar este repositorio y usarlo como plantilla para desarrollar sus propias aplicaciones GPT.
Queremos que eventualmente incluya el ajuste de chatgpt con sede en RL. En general, esto no cambia el modelo de conocimiento subyacente, pero hace que la interacción con el modelo sea más humano.
Configurar el código es bastante mínimo y puede reproducirse fácilmente en entornos de VM locales o de nubes.*
conda create -n python38 python=3.8
conda activate python38
conda install --file requirements.txt
* En el futuro intentaremos proporcionar una versión Docker de esta configuración.
Proporcionamos un código de muestra que descarga y preprocesos el conjunto de datos Tiny-Shakespeare para capacitación y ajuste fino. Use este código como plantilla para crear preprocesamiento de datos para sus propios datos.
python src/data_io/fetch_shakespeare.py
Entrenamiento de un modelo GPT muy pequeño desde cero en el conjunto de datos Tiny-Shakespeare creado en el paso anterior. El modelo resultante no será muy generalizable, ya que es bastante pequeño y entrenado en un conjunto de datos muy pequeño, pero puede generar citas similares a Shakespeare.
Cambie el archivo de configuración y para entrenar un modelo desde cero en sus propios datos. En este punto, técnicamente puede escalar a tamaños de modelo muy grandes de acuerdo con el tamaño y los recursos de sus datos.*
python src/training/train_main.py --config_file config/train_shakespeare_small.yml
* Para este paso, probablemente necesitará una o varias GPU.
Ajunte el modelo GPT2 de código abierto en sus propios datos. Es posible utilizar cualquier modelo de código abierto GPT (GPT2-Medio, GPT2-XL, etc.). Esta es la opción más común, ya que requiere menos datos y recursos (es posible ejecutar esto incluso en una CPU) y es mucho más rápido que el entrenamiento desde cero.
python src/training/train_main.py --config_file config/finetune_shakespeare.yml
Muestra una serie de salidas de un modelo capacitado dado un mensaje de entrada. Esto se puede usar para la inferencia por lotes.
python src/inference/sample_main.py --config_file config/sample_shakespeare.yml
Un servidor Lightweigth que sirve a un modelo capacitado en una API REST.
uvicorn src.inference.service_main:app --reload --reload-include config/sample_gpt2.yml
Una vez que el servidor se ejecuta, puede consultar el punto final con un mensaje (como solicitud de publicación). Para obtener más detalles sobre los detalles de la consulta, eche un vistazo al siguiente script de prueba.
Una vez que su servidor se está ejecutando, puede probar el punto final utilizando el siguiente script.
python src/inference/test_query.py
Este repositorio se ha implementado teniendo en cuenta una aplicación de producción e incluye pruebas de unidad y integración.
* Tesing no es un cajero automático extenso, pero intentaremos aumentar la cobertura en el futuro.
Se han incluido pruebas unitarias para cubrir la funcionalidad principal. Puede ejecutar la suite de prueba unitaria completa con el siguiente comando:
pytest test/unit/
Además de las pruebas unitarias, hemos incluido algunas pruebas de integración para los flujos de trabajo de entrenamiento, ajuste y muestreo.
pytest test/integration/
* Las pruebas de integración actualmente requieren datos para funcionar (ver arriba).
Generalmente es aconsejable habilitar ganchos previos al compromiso cuando se trabaja con el repositorio. Actualmente ejecuta algunas verificaciones de formato básicas y ejecuta el conjunto de pruebas unitarias (pero no las pruebas de integración).
conda install -c conda-forge pre-commit
pre-commit install
La implementación de GPT en este repositorio está inspirada en el repositorio de nanogpt de Andrej Karpathy. Nuestro objetivo era volver a implementarlo, volver a estructurarlo y extenderlo con módulos que faciliten la construcción de diferentes tipos de aplicaciones de producción además de ella.