Note:
- Este tutorial requiere acceso a Oracle Cloud. Para registrarse en una cuenta gratuita, consulte Introducción a la cuenta gratuita de Oracle Cloud Infrastructure.
- Utiliza valores de ejemplo para credenciales, arrendamiento y compartimentos de Oracle Cloud Infrastructure. Al completar el laboratorio, sustituya estos valores por otros específicos de su entorno en la nube.
Ajuste y sirva modelos de lenguaje de gran tamaño en Oracle Cloud Infrastructure con dstack
Introducción
dstack
es una herramienta de código abierto que simplifica la orquestación de contenedores de inteligencia artificial (IA) y hace que la formación y el despliegue distribuidos de modelos de lenguaje grande (LLM) sean más accesibles. La combinación de dstack
y Oracle Cloud Infrastructure (OCI) desbloquea un proceso optimizado para configurar la infraestructura en la nube para el entrenamiento distribuido y el despliegue de modelos escalables.
¿Cómo funciona dstack
?
dstack
ofrece una interfaz unificada para el desarrollo, entrenamiento e implementación de modelos de IA en cualquier nube o centro de datos. Por ejemplo, puede especificar una configuración para una tarea de formación o un modelo que desplegar, y dstack
se encargará de configurar la infraestructura necesaria y orquestar los contenedores. Una de las ventajas que ofrece dstack
es que permite el uso de cualquier hardware, marcos y scripts.
Objetivos
-
Ajuste un modelo de LLM mediante
dstack
en OCI, incorpore las mejores prácticas del manual de alineación facial de abrazo y despliegue el modelo mediante la inferencia de generación de texto facial de abrazo (TGI).Nota: El experimento descrito en el tutorial utiliza un cluster de OCI de tres nodos, cada uno con 2 GPU A10, para ajustar el modelo Gemma 7B.
Requisitos
-
Acceso a un arrendamiento de OCI.
-
Acceso a unidades con GPU NVIDIA como GPU A10 (por ejemplo,
VM.GPU.A10.2
). Para obtener más información sobre las solicitudes para aumentar el límite, consulte Límites de servicio. -
Una cuenta Hugging Face con un token de acceso configurado para descargar el modelo Gemma 7B.
Tarea 1: Configuración de dstack
con OCI
-
Instale el paquete Python
dstack
con el siguiente comando. Dado quedstack
soporta varios proveedores de nube, podemos reducir el ámbito a OCI.pip install dstack[oci]
-
Configure las credenciales específicas de OCI en el archivo
~/.dstack/server/config.yml
. El siguiente código asume que tiene credenciales configuradas para la interfaz de línea de comandos (CLI) de OCI. Para obtener otras opciones de configuración, consulte la documentación de dstack.projects: - name: main backends: - type: oci creds: type: default
-
Ejecute el servidor
dstack
con el siguiente comando.dstack server INFO Applying ~/.dstack/server/config.yml... INFO Configured the main project in ~/.dstack/config.yml INFO The admin token is ab6e8759-9cd9-4e84-8d47-5b94ac877ebf INFO The dstack server 0.18.4 is running at http://127.0.0.1:3000
-
Cambie a la carpeta con los scripts de proyecto e inicialice
dstack
con el siguiente comando.dstack init
Tarea 2: Ajuste del trabajo en OCI con dstack
Para afinar el modelo Gemma 7B, utilizaremos el manual de alineación facial de abrazo para garantizar la incorporación de las mejores prácticas de ajuste fino. El código fuente de este tutorial se puede obtener de aquí: GitHub. Sumérjase en los pasos prácticos para afinar su LLM.
Una vez que haya cambiado a la carpeta del proyecto, utilice los siguientes comandos para iniciar el trabajo de ajuste en OCI con dstack
.
ACCEL_CONFIG_PATH=fsdp_qlora_full_shard.yaml \
FT_MODEL_CONFIG_PATH=qlora_finetune_config.yaml \
HUGGING_FACE_HUB_TOKEN=xxxx \
WANDB_API_KEY=xxxx \
dstack run . -f ft.task.dstack.yml
Las variables de entorno FT_MODEL_CONFIG_PATH
, ACCEL_CONFIG_PATH
, HUGGING_FACE_HUB_TOKEN
y WANDB_API_KEY
se definen dentro de la configuración de tarea ft.task.dstack.yml
. dstack run
ejecuta la tarea definida en ft.task.dstack.yml
en OCI.
Nota:
dstack
copia automáticamente el contenido del directorio actual al ejecutar la tarea.
Vamos a explorar las partes clave de cada archivo YAML (para ver el contenido completo, consulte el repositorio).
El archivo qlora_finetune_config.yaml
es la configuración de receta que utiliza el manual de alineación para comprender cómo desea ajustar un modelo de lenguaje grande (LLM).
# Model arguments
model_name_or_path: google/gemma-7b
tokenizer_name_or_path: philschmid/gemma-tokenizer-chatml
torch_dtype: bfloat16
bnb_4bit_quant_storage: bfloat16
# LoRA arguments
load_in_4bit: true
use_peft: true
lora_r: 8
lora_alpha: 16
lora_dropout: 0.05
lora_target_modules:
- q_proj
- k_proj
# ...
# Data training arguments
dataset_mixer:
chansung/mental_health_counseling_conversations: 1.0
dataset_splits:
- train
- test
# ...
-
Argumentos de modelo:
model_name_or_path
: se elige Gemma 7B de Google como modelo base.tokenizer_name_or_path
: el manual de alineación utiliza el métodoapply_chat_template()
del tokenizador seleccionado. Este tutorial utiliza la plantilla ChatML en lugar de la plantilla de conversación estándar de Gemma 7B.torch_dtype
ybnb_4bit_quant_storage
: estos dos valores se deben definir de la misma forma si queremos aprovechar el método de ajuste detallado FSDP+QLoRA. Dado que Gemma 7B es difícil de encajar en una única GPU A10, este tutorial utiliza FSDP+QLoRA para dividir un modelo en 2 GPU A10 y aprovechar la técnica QLoRA.
-
LoRA Argumentos: configuraciones específicas de LoRA. Dado que en esta publicación del tutorial se utiliza la técnica FSDP+QLoRA,
load_in_4bit
se define entrue
. Otras configuraciones pueden variar de un experimento a otro. -
Argumentos de formación de datos: hemos preparado un conjunto de datos basado en el conjunto de datos de conversaciones de asesoramiento sobre salud mental de Amod. Dado que el manual de alineación solo entiende los datos en forma de
[{"role": "user", "content": "..."}, {"role": "assistant", "content": "..."}, …]
, que se pueden interpretar con el métodoapply_chat_template()
del tokenizador, el conjunto de datos preparado es básicamente la conversión del conjunto de datos original en el formato compatible conapply_chat_template()
.
El archivo fsdp_qlora_full_shard.yaml
configura para acelerar el uso de la infraestructura subyacente para ajustar el LLM.
compute_environment: LOCAL_MACHINE
distributed_type: FSDP # Use Fully Sharded Data Parallelism
fsdp_config:
fsdp_auto_wrap_policy: TRANSFORMER_BASED_WRAP
fsdp_backward_prefetch: BACKWARD_PRE
fsdp_cpu_ram_efficient_loading: true
fsdp_use_orig_params: false
fsdp_offload_params: true
fsdp_sharding_strategy: FULL_SHARD
# ... (other FSDP configurations)
# ... (other configurations)
distributed_type
:FSDP
indica el uso del paralelo de datos con particiones horizontales completas (FSDP), una técnica que permite entrenar modelos grandes que, de lo contrario, no cabrían en una sola GPU.fsdp_config
: estos configuran el funcionamiento de FSDP, como la forma en que se fragmenta el modelo (fsdp_sharding_strategy
) y si los parámetros se descargan en la CPU (fsdp_offload_params
).
Con FSDP
de distributed_type
y FULL_SHARD
de fsdp_sharding_strategy
de fsdp_config
, un modelo se particionará en varias GPU en una sola máquina. Cuando se trata de varios nodos de cálculo, cada nodo alojará una copia idéntica del modelo, que se divide en varias GPU dentro de ese nodo. Esto significa que cada instancia de modelo particionada en cada nodo procesa diferentes secciones o lotes del juego de datos. Para distribuir un único modelo entre varias GPU que abarquen varios nodos, configure el parámetro fsdp_sharding_strategy
como HYBRID_SHARD
.
Los parámetros adicionales como machine_rank
, num_machines
y num_processes
son importantes para la coordinación. Sin embargo, se recomienda definir estos valores de forma dinámica en tiempo de ejecución, ya que proporciona flexibilidad al cambiar entre diferentes configuraciones de infraestructura.
Tarea 3: Instrucciones para dstack
mediante la configuración simplificada para aprovisionar la infraestructura
Vamos a explorar la configuración fsdp_qlora_full_shard.yaml
que reúne todo y le indica a dstack
cómo aprovisionar la infraestructura y ejecutar la tarea.
type: task
nodes: 3
python: "3.11"
env:
- ACCEL_CONFIG_PATH
- FT_MODEL_CONFIG_PATH
- HUGGING_FACE_HUB_TOKEN
- WANDB_API_KEY
commands:
# ... (setup steps, cloning repo, installing requirements)
- ACCELERATE_LOG_LEVEL=info accelerate launch \
--config_file recipes/custom/accel_config.yaml \
--main_process_ip=$DSTACK_MASTER_NODE_IP \
--main_process_port=8008 \
--machine_rank=$DSTACK_NODE_RANK \
--num_processes=$DSTACK_GPUS_NUM \
--num_machines=$DSTACK_NODES_NUM \
scripts/run_sft.py recipes/custom/config.yaml
ports:
- 6006
resources:
gpu: 1..2
shm_size: 24GB
Puntos clave para resaltar::
- Integración perfecta:
dstack
se integra sin esfuerzo con el ecosistema de código abierto de Hugging Face. En particular, simplemente puede utilizar la biblioteca de aceleración con las configuraciones que definimos enfsdp_qlora_full_shard.yaml
como normales. - Configuración automática: las variables
DSTACK_MASTER_NODE_IP
,DSTACK_NODE_RANK
,DSTACK_GPUS_NUM
yDSTACK_NODES_NUM
las gestiona automáticamentedstack
, lo que reduce la configuración manual. - Asignación de recursos:
dstack
facilita la especificación del número de nodos y GPU (gpu: 1..2) para el trabajo de ajuste. Por lo tanto, para este tutorial, hay tres nodos cada uno de los cuales está equipado con 2 GPU A10 (24 GB).
Tarea 4: Servir su modelo ajustado con dstack
Una vez que el modelo está ajustado, dstack
facilita su despliegue en OCI mediante el marco Hugging Face Text Generation Inference (TGI).
A continuación, se muestra un ejemplo de cómo puede definir un servicio en dstack
:
type: service
image: ghcr.io/huggingface/text-generation-inference:latest
env:
- HUGGING_FACE_HUB_TOKEN
- MODEL_ID=chansung/mental_health_counseling_merged_v0.1
commands:
- text-generation-launcher \
--max-input-tokens 512 --max-total-tokens 1024 \
--max-batch-prefill-tokens 512 --port 8000
port: 8000
resources:
gpu:
memory: 48GB
# (Optional) Enable the OpenAI-compatible endpoint
model:
format: tgi
type: chat
name: chansung/mental_health_counseling_merged_v0.1
Ventajas clave de este enfoque:
- Gateway HTTPS seguro:
dstack
simplifica el proceso de configuración de una conexión HTTPS segura a través de un gateway, un aspecto crucial del servicio de modelo de nivel de producción. - Optimizado para la inferencia: el marco de TGI está diseñado para una inferencia de generación de texto eficiente, lo que garantiza que su modelo ofrezca resultados fiables y con capacidad de respuesta.
- Escala automática:
dstack
permite especificar la política de escala automática, incluido el número mínimo y máximo de réplicas de modelos.
En este punto, puede interactuar con el servicio mediante el comando curl
estándar y las solicitudes de Python, el SDK OpenAI y las bibliotecas de cliente de inferencia de Hugging Face. Por ejemplo, el siguiente fragmento de código muestra un ejemplo de curl.
curl -X POST https://black-octopus-1.mycustomdomain.com/generate \
-H "Authorization: Bearer <dstack-token>" \
-H 'Content-Type: application/json' \
-d '{"inputs": "I feel bad...", "parameters": {"max_new_tokens": 128}}'
Además, para un modelo desplegado, dstack
proporciona automáticamente una interfaz de usuario para interactuar directamente con el modelo.
Pasos Siguientes
Al seguir los pasos descritos en este tutorial, ha desbloqueado un potente enfoque para ajustar y desplegar LLM mediante las capacidades combinadas de dstack
, OCI y el ecosistema Hugging Face. Ahora puede aprovechar la interfaz fácil de usar de dstack
para gestionar sus recursos de OCI de forma eficaz, lo que agiliza el proceso de configuración de entornos de formación distribuidos para sus proyectos de LLM.
Además, la integración con el Manual de alineación de Hugging Face y el marco TGI le permite ajustar y servir sus modelos sin problemas, asegurando que estén optimizados para el rendimiento y listos para aplicaciones del mundo real. Le animamos a explorar las posibilidades y experimentar con diferentes modelos y configuraciones para lograr los resultados deseados en el mundo del procesamiento del lenguaje natural.
Agradecimientos
- Autor: Chansung Park (HuggingFace becario, investigador de IA), Yann Caniou (especialista en infraestructura de IA/GPU), Bruno Garbaccio (especialista en infraestructura de IA/GPU)
Más recursos de aprendizaje
Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de aprendizaje gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en Oracle Learning Explorer.
Para obtener documentación sobre el producto, visite Oracle Help Center.
Fine-Tune and Serve Large Language Models on Oracle Cloud Infrastructure with dstack
G11974-01
July 2024