Repositorio oficial del Manual del ingeniero LLM de Paul Iusztin y Maxime Labonne
El objetivo de este libro es crear su propio sistema basado en LLM de un extremo a otro utilizando las mejores prácticas:
Puede descargar y utilizar el modelo entrenado final en Hugging Face.
Para instalar y ejecutar el proyecto localmente, necesita las siguientes dependencias.
Herramienta | Versión | Objetivo | Enlace de instalación |
---|---|---|---|
pienv | ≥2.3.36 | Múltiples versiones de Python (opcional) | Guía de instalación |
Pitón | 3.11 | Entorno de ejecución | Descargar |
Poesía | ≥1.8.3 | Gestión de paquetes | Guía de instalación |
Estibador | ≥27.1.1 | Contenedorización | Guía de instalación |
CLI de AWS | ≥2.15.42 | Gestión de la nube | Guía de instalación |
git | ≥2.44.0 | Control de versiones | Descargar |
El código también utiliza y depende de los siguientes servicios en la nube. Por ahora no tienes que hacer nada. Lo guiaremos en las secciones de instalación e implementación sobre cómo usarlos:
Servicio | Objetivo |
---|---|
AbrazosCara | Registro de modelos |
Cometa ML | Rastreador de experimentos |
Opik | Monitoreo rápido |
ZenML | Capa de orquestador y artefactos |
AWS | Computación y almacenamiento |
MongoDB | Base de datos NoSQL |
Qdrant | Base de datos vectorial |
Acciones de GitHub | Canalización de CI/CD |
En el Manual del ingeniero de LLM, el Capítulo 2 lo guiará a través de cada herramienta. Los capítulos 10 y 11 proporcionan guías paso a paso sobre cómo configurar todo lo que necesita.
Aquí está la descripción general del directorio:
.
├── code_snippets/ # Standalone example code
├── configs/ # Pipeline configuration files
├── llm_engineering/ # Core project package
│ ├── application/
│ ├── domain/
│ ├── infrastructure/
│ ├── model/
├── pipelines/ # ML pipeline definitions
├── steps/ # Pipeline components
├── tests/ # Test examples
├── tools/ # Utility scripts
│ ├── run.py
│ ├── ml_service.py
│ ├── rag.py
│ ├── data_warehouse.py
llm_engineering/
es el paquete principal de Python que implementa la funcionalidad LLM y RAG. Sigue los principios del diseño basado en dominios (DDD):
domain/
: Entidades y estructuras comerciales principalesapplication/
: Lógica empresarial, rastreadores e implementación de RAGmodel/
: formación e inferencia LLMinfrastructure/
: Integraciones de servicios externos (AWS, Qdrant, MongoDB, FastAPI) La lógica del código y las importaciones fluyen de la siguiente manera: infrastructure
→ model
→ application
→ domain
pipelines/
: Contiene los pipelines de ML de ZenML, que sirven como punto de entrada para todos los pipelines de ML. Coordina las etapas de procesamiento de datos y entrenamiento de modelos del ciclo de vida de ML.
steps/
: Contiene pasos individuales de ZenML, que son componentes reutilizables para crear y personalizar canalizaciones de ZenML. Los pasos realizan tareas específicas (p. ej., carga de datos, preprocesamiento) y se pueden combinar dentro de las canalizaciones de ML.
tests/
: cubre algunas pruebas de muestra utilizadas como ejemplos dentro del proceso de CI.
tools/
: Scripts de utilidad utilizados para llamar a las canalizaciones ZenML y al código de inferencia:
run.py
: script de punto de entrada para ejecutar canalizaciones ZenML.ml_service.py
: inicia el servidor de inferencia de la API REST.rag.py
: demuestra el uso del módulo de recuperación RAG.data_warehouse.py
: se utiliza para exportar o importar datos desde el almacén de datos de MongoDB a través de archivos JSON. configs/
: Archivos de configuración YAML de ZenML para controlar la ejecución de canalizaciones y pasos.
code_snippets/
: ejemplos de código independientes que se pueden ejecutar de forma independiente.
Comience clonando el repositorio y navegando al directorio del proyecto:
git clone https://github.com/PacktPublishing/LLM-Engineers-Handbook.git
cd LLM-Engineers-Handbook
A continuación, tenemos que preparar su entorno Python y sus dependencias adyacentes.
El proyecto requiere Python 3.11. Puede usar su instalación global de Python o configurar una versión específica del proyecto usando pyenv.
Verifique su versión de Python:
python --version # Should show Python 3.11.x
pyenv --version # Should show pyenv 2.3.36 or later
pyenv install 3.11.8
python --version # Should show Python 3.11.8
python --version
# Output: Python 3.11.8
Nota
El proyecto incluye un archivo .python-version
que establece automáticamente la versión correcta de Python cuando estás en el directorio del proyecto.
El proyecto utiliza Poetry para la gestión de dependencias.
poetry --version # Should show Poetry version 1.8.3 or later
poetry env use 3.11
poetry install --without aws
poetry run pre-commit install
Esto:
Como nuestro administrador de tareas, ejecutamos todos los scripts usando Poe the Poet.
poetry shell
poetry poe ...
Si tienes problemas con poethepoet
, aún puedes ejecutar los comandos del proyecto directamente a través de Poetry. He aquí cómo:
pyproject.toml
poetry run
con el comando subyacente En lugar de:
poetry poe local-infrastructure-up
Utilice el comando directo de pyproject.toml:
poetry run < actual-command-from-pyproject-toml >
Nota: Todos los comandos del proyecto se definen en la sección [tool.poe.tasks] de pyproject.toml
Ahora, configuremos nuestro proyecto local con todas las credenciales y tokens necesarios para ejecutar el código localmente.
Después de haber instalado todas las dependencias, debe crear y completar un archivo .env
con sus credenciales para interactuar adecuadamente con otros servicios y ejecutar el proyecto. Configurar sus credenciales confidenciales en un archivo .env
es una buena práctica de seguridad, ya que este archivo no se enviará a GitHub ni se compartirá con nadie más.
cp .env.example .env # The file must be at your repository's root!
.env
para comenzar. Las siguientes son las configuraciones obligatorias que debemos completar cuando trabajamos localmente: Para autenticarse en la API de OpenAI, debe completar la var de entorno OPENAI_API_KEY
con un token de autenticación.
OPENAI_API_KEY = your_api_key_here
→ Consulte este tutorial para aprender cómo proporcionar uno desde OpenAI.
Para autenticarse en Hugging Face, debe completar la var de entorno HUGGINGFACE_ACCESS_TOKEN
con un token de autenticación.
HUGGINGFACE_ACCESS_TOKEN = your_token_here
→ Consulte este tutorial para aprender cómo proporcionar uno desde Hugging Face.
Para autenticarse en Comet ML (requerido solo durante la capacitación) y Opik, debe completar la var de entorno COMET_API_KEY
con su token de autenticación.
COMET_API_KEY = your_api_key_here
→ Consulte este tutorial para aprender cómo obtener las variables de Comet ML desde arriba. También puede acceder al panel de Opik utilizando este enlace.
Al implementar el proyecto en la nube, debemos establecer configuraciones adicionales para Mongo, Qdrant y AWS. Si solo está trabajando localmente, los valores predeterminados de estas variables de entorno funcionarán de inmediato. Las instrucciones de implementación detalladas están disponibles en el Capítulo 11 del Manual del ingeniero de LLM.
Debemos cambiar la var de entorno DATABASE_HOST
con la URL que apunte a su clúster MongoDB en la nube.
DATABASE_HOST = your_mongodb_url
→ Consulte este tutorial para aprender cómo crear y alojar un clúster MongoDB de forma gratuita.
Cambie USE_QDRANT_CLOUD
a true
, QDRANT_CLOUD_URL
con la URL apunta a su clúster Qdrant en la nube y QDRANT_APIKEY
con su clave API.
USE_QDRANT_CLOUD = true
QDRANT_CLOUD_URL = your_qdrant_cloud_url
QDRANT_APIKEY = your_qdrant_api_key
→ Consulte este tutorial para aprender cómo crear un clúster Qdrant de forma gratuita.
Para que su configuración de AWS funcione correctamente, necesita la CLI de AWS instalada en su máquina local y configurada correctamente con un usuario administrador (o un usuario con permisos suficientes para crear nuevos recursos de SageMaker, ECR y S3; el uso de un usuario administrador hacer todo más sencillo).
El Capítulo 2 proporciona instrucciones paso a paso sobre cómo instalar AWS CLI, crear un usuario administrador en AWS y obtener una clave de acceso para configurar las variables de entorno AWS_ACCESS_KEY
y AWS_SECRET_KEY
. Si ya tiene un usuario administrador de AWS, debe configurar las siguientes variables de entorno en su archivo .env
:
AWS_REGION=eu-central-1 # Change it with your AWS region.
AWS_ACCESS_KEY=your_aws_access_key
AWS_SECRET_KEY=your_aws_secret_key
Las credenciales de AWS normalmente se almacenan en ~/.aws/credentials
. Puede ver este archivo directamente usando cat
o comandos similares:
cat ~ /.aws/credentials
Importante
Hay opciones de configuración adicionales disponibles en settings.py. Cualquier variable de la clase Settings
se puede configurar a través del archivo .env
.
Cuando ejecutamos el proyecto localmente, alojamos una base de datos MongoDB y Qdrant usando Docker. Además, un servidor ZenML de prueba está disponible a través de su paquete Python.
Advertencia
Necesita Docker instalado (>= v27.1.1)
Para facilitar su uso, puede iniciar toda la infraestructura de desarrollo local con el siguiente comando:
poetry poe local-infrastructure-up
Además, puedes detener el servidor ZenML y todos los contenedores Docker usando el siguiente comando:
poetry poe local-infrastructure-down
Advertencia
Cuando se ejecuta en MacOS, antes de iniciar el servidor, exporte la siguiente variable de entorno: export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES
De lo contrario, la conexión entre el servidor local y la canalización se interrumpirá. ? Más detalles en este número. Esto se hace de forma predeterminada cuando se utiliza Poe the Poet.
Inicie la API RESTful de inferencia en tiempo real:
poetry poe run-inference-ml-service
Importante
El microservicio LLM, llamado por la API RESTful, funcionará solo después de implementar el LLM en AWS SageMaker.
URL del panel: localhost:8237
Credenciales predeterminadas:
username
: predeterminadopassword
:→ Obtenga más información sobre el uso y la configuración de ZenML.
URL de la API REST: localhost:6333
URL del panel: localhost:6333/dashboard
→ Obtenga más información sobre el uso y la configuración de Qdrant con Docker.
URI de la base de datos: mongodb://llm_engineering:[email protected]:27017
Nombre de la base de datos: twin
Credenciales predeterminadas:
username
: llm_engineeringpassword
: llm_engineering→ Obtenga más información sobre el uso y la configuración de MongoDB con Docker.
Puede buscar sus colecciones de MongoDB usando el complemento MongoDB de su IDE (que debe instalar por separado), donde debe usar el URI de la base de datos para conectarse a la base de datos MongoDB alojada en el contenedor Docker: mongodb://llm_engineering:[email protected]:27017
Importante
Todo lo relacionado con la capacitación o la ejecución de LLM (por ejemplo, capacitación, evaluación, inferencia) solo se puede ejecutar si configura AWS SageMaker, como se explica en la siguiente sección sobre infraestructura en la nube.
Aquí presentaremos rápidamente cómo implementar el proyecto en AWS y otros servicios sin servidor. No entraremos en detalles (ya que todo se presenta en el libro), solo señalaremos los pasos principales que debe seguir.
Primero, reinstale sus dependencias de Python con el grupo de AWS:
poetry install --with aws
Nota
El Capítulo 10 proporciona instrucciones paso a paso en la sección "Implementación del microservicio LLM mediante AWS SageMaker".
En este punto, esperamos que tenga AWS CLI instalada y su AWS CLI y las variables de entorno del proyecto (dentro del archivo .env
) configuradas correctamente con un usuario administrador de AWS.
Para garantizar las mejores prácticas, debemos crear un nuevo usuario de AWS restringido a crear y eliminar únicamente recursos relacionados con AWS SageMaker. Créelo ejecutando:
poetry poe create-sagemaker-role
Creará un archivo sagemaker_user_credentials.json
en la raíz de su repositorio con sus nuevos valores AWS_ACCESS_KEY
y AWS_SECRET_KEY
. Pero antes de reemplazar sus nuevas credenciales de AWS, ejecute también el siguiente comando para crear el rol de ejecución (para crearlo usando sus credenciales de administrador).
Para crear el rol de ejecución de IAM utilizado por AWS SageMaker para acceder a otros recursos de AWS en nuestro nombre, ejecute lo siguiente:
poetry poe create-sagemaker-execution-role
Creará un archivo sagemaker_execution_role.json
en la raíz de su repositorio con su nuevo valor AWS_ARN_ROLE
. Agréguelo a su archivo .env
.
Una vez que haya actualizado los valores AWS_ACCESS_KEY
, AWS_SECRET_KEY
y AWS_ARN_ROLE
en su archivo .env
, puede utilizar AWS SageMaker. Tenga en cuenta que este paso es crucial para completar la configuración de AWS.
Comenzamos el proceso de capacitación a través de ZenML ejecutando lo siguiente:
poetry poe run-training-pipeline
Esto iniciará el código de entrenamiento usando las configuraciones de configs/training.yaml
directamente en SageMaker. Puede visualizar los resultados en el panel de Comet ML.
Iniciamos el proceso de evaluación a través de ZenML ejecutando lo siguiente:
poetry poe run-evaluation-pipeline
Esto iniciará el código de evaluación usando las configuraciones de configs/evaluating.yaml
directamente en SageMaker. Puede visualizar los resultados en conjuntos de datos *-results
guardados en su perfil de Hugging Face.
Para crear un punto final de inferencia de AWS SageMaker, ejecute:
poetry poe deploy-inference-endpoint
Para probarlo, ejecute:
poetry poe test-sagemaker-endpoint
Para eliminarlo, ejecute:
poetry poe delete-inference-endpoint
Las canalizaciones, artefactos y contenedores de ML se implementan en AWS aprovechando las funciones de implementación de ZenML. Por lo tanto, debe crear una cuenta en ZenML Cloud y seguir su guía sobre cómo implementar una pila ZenML en AWS. De lo contrario, proporcionamos instrucciones paso a paso en el Capítulo 11 , sección Implementación de las canalizaciones de LLM Twin en la nube sobre lo que debe hacer.
Aprovechamos las opciones sin servidor de Qdrant y MongoDB al implementar el proyecto. Por lo tanto, puede seguir los tutoriales de Qdrant y MongoDB sobre cómo crear un clúster freemium para cada uno o consultar el Capítulo 11 , sección Implementación de las canalizaciones de LLM Twin en la nube y seguir nuestras instrucciones paso a paso.
Usamos GitHub Actions para implementar nuestras canalizaciones de CI/CD. Para implementar el suyo propio, debe bifurcar nuestro repositorio y configurar las siguientes variables de entorno como secretos de acciones en su repositorio bifurcado:
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
AWS_ECR_NAME
AWS_REGION
Además, proporcionamos instrucciones sobre cómo configurar todo en el Capítulo 11 , sección Agregar LLMOps al LLM Twin .
Puede visualizar los resultados en sus paneles de control autohospedados si crea una cuenta de Comet y configura correctamente la var de entorno COMET_API_KEY
. Como Opik funciona con Comet, no es necesario configurar nada más junto con Comet:
Todas las canalizaciones de ML serán orquestadas entre bastidores por ZenML. Existen algunas excepciones cuando se ejecutan scripts de utilidades, como exportar o importar desde el almacén de datos.
Las canalizaciones de ZenML son el punto de entrada para la mayoría de los procesos a lo largo de este proyecto. Están bajo la carpeta pipelines/
. Por lo tanto, cuando desee comprender o depurar un flujo de trabajo, el mejor enfoque es comenzar con la canalización ZenML.
Para ver los pipelines en ejecución y sus resultados:
Pipelines
feature_engineering
)feature_engineering_run_2024_06_20_18_40_24
)Ahora, exploremos todas las canalizaciones que puede ejecutar. Desde la recopilación de datos hasta la capacitación, los presentaremos en su orden natural para recorrer el proyecto LLM de principio a fin.
Ejecute el ETL de recopilación de datos:
poetry poe run-digital-data-etl
Advertencia
Debe tener Chrome (u otro navegador basado en Chromium) instalado en su sistema para que funcionen los rastreadores de LinkedIn y Medium (que usan Selenium internamente). Según su versión de Chrome, Chromedriver se instalará automáticamente para habilitar la compatibilidad con Selenium. Otra opción es ejecutar todo usando nuestra imagen de Docker si no deseas instalar Chrome. Por ejemplo, para ejecutar todas las canalizaciones combinadas, puede ejecutar poetry poe run-docker-end-to-end-data-pipeline
. Tenga en cuenta que el comando se puede modificar para admitir cualquier otra canalización.
Si, por cualquier otro motivo, no tiene instalado un navegador basado en Chromium y no desea utilizar Docker, tiene otras dos opciones para evitar este problema de Selenium:
chromedriver_autoinstaller.install()
de application.crawlers.base y otras llamadas estáticas que verifican los controladores de Chrome. y selenio. Para agregar enlaces adicionales para recopilar, vaya a configs/digital_data_etl_[author_name].yaml
y agréguelos al campo de links
. Además, puede crear un archivo completamente nuevo y especificarlo en tiempo de ejecución, así: python -m llm_engineering.interfaces.orchestrator.run --run-etl --etl-config-filename configs/digital_data_etl_[your_name].yaml
Ejecute el proceso de ingeniería de funciones:
poetry poe run-feature-engineering-pipeline
Genere el conjunto de datos de instrucciones:
poetry poe run-generate-instruct-datasets-pipeline
Genere el conjunto de datos de preferencias:
poetry poe run-generate-preference-datasets-pipeline
Ejecute todo lo anterior comprimido en una sola canalización:
poetry poe run-end-to-end-data-pipeline
Exporte los datos del almacén de datos a archivos JSON:
poetry poe run-export-data-warehouse-to-json
Importe datos al almacén de datos desde archivos JSON (de forma predeterminada, importa los datos desde el directorio data/data_warehouse_raw_data
):
poetry poe run-import-data-warehouse-from-json
Exporte artefactos ZenML a JSON:
poetry poe run-export-artifact-to-json-pipeline
Esto exportará los siguientes artefactos ZenML a la carpeta output
como archivos JSON (tomará su última versión):
Puede configurar qué artefactos exportar modificando el archivo de configuración configs/export_artifact_to_json.yaml
.
Ejecute el canal de capacitación:
poetry poe run-training-pipeline
Ejecute el proceso de evaluación:
poetry poe run-evaluation-pipeline
Advertencia
Para que esto funcione, asegúrese de haber configurado correctamente AWS SageMaker como se describe en Configurar la infraestructura de la nube (para producción).
Llame al módulo de recuperación de RAG con una consulta de prueba:
poetry poe call-rag-retrieval-module
Inicie la API RESTful de inferencia en tiempo real:
poetry poe run-inference-ml-service
Llame a la API RESTful de inferencia en tiempo real con una consulta de prueba:
poetry poe call-inference-ml-service
Recuerde que puede monitorear los seguimientos de avisos en Opik.
Advertencia
Para que el servicio de inferencia funcione, debe tener el microservicio LLM implementado en AWS SageMaker, como se explica en la sección de configuración de la infraestructura de la nube.
Verifique o solucione sus problemas de pelusa:
poetry poe lint-check
poetry poe lint-fix
Verifique o solucione sus problemas de formato:
poetry poe format-check
poetry poe format-fix
Verifique el código para ver las credenciales filtradas:
poetry poe gitleaks-check
Ejecute todas las pruebas usando el siguiente comando:
poetry poe test
Según los pasos de configuración y uso descritos anteriormente, suponiendo que la infraestructura local y en la nube funcione y que el .env
esté lleno como se esperaba, siga los siguientes pasos para ejecutar el sistema LLM de un extremo a otro:
Recopilar datos: poetry poe run-digital-data-etl
Funciones informáticas: poetry poe run-feature-engineering-pipeline
Computar conjunto de datos de instrucciones: poetry poe run-generate-instruct-datasets-pipeline
Calcular el conjunto de datos de alineación de preferencias: poetry poe run-generate-preference-datasets-pipeline
Importante
De ahora en adelante, para que estos pasos funcionen, debe configurar correctamente AWS SageMaker, como ejecutar poetry install --with aws
y completar las variables y configuraciones de entorno relacionadas con AWS.
Ajuste fino de SFT Llamma 3.1: poetry poe run-training-pipeline
Para DPO, vaya a configs/training.yaml
, cambie finetuning_type
a dpo
y ejecute poetry poe run-training-pipeline
nuevamente
Evaluar modelos ajustados: poetry poe run-evaluation-pipeline
Importante
De ahora en adelante, para que estos pasos funcionen, debe configurar correctamente AWS SageMaker, como ejecutar poetry install --with aws
y completar las variables y configuraciones de entorno relacionadas con AWS.
Llame solo al módulo de recuperación RAG: poetry poe call-rag-retrieval-module
Implemente el microservicio LLM Twin en SageMaker: poetry poe deploy-inference-endpoint
Pruebe el microservicio LLM Twin: poetry poe test-sagemaker-endpoint
Inicie el servidor RAG de un extremo a otro: poetry poe run-inference-ml-service
Pruebe el servidor RAG: poetry poe call-inference-ml-service
Este curso es un proyecto de código abierto publicado bajo la licencia MIT. Por lo tanto, siempre que distribuya nuestra LICENCIA y reconozca nuestro trabajo, puede clonar o bifurcar este proyecto de manera segura y usarlo como fuente de inspiración para lo que desee (por ejemplo, proyectos universitarios, proyectos de títulos universitarios, proyectos personales, etc.).