El

ajuste preciso de un modelo de lenguaje de gran tamaño (LLM) en la actualidad suele forzar un equilibrio entre el control del ciclo de entrenamiento y la simplicidad operativa. Con los servicios totalmente gestionados, usted selecciona un modelo base, proporciona datos e hiperparámetros, y el servicio es el propietario de todo lo demás, lo que funciona bien cuando se ajusta a su problema una receta estándar y preempaquetada. Los servicios menos gestionados proporcionan más control, pero también permiten gestionar una mayor parte de la infraestructura subyacente y los marcos de formación. A veces, una receta estándar no basta: necesitas un plan de estudios personalizado sobre pérdida de datos o pérdida de datos para realizar ajustes supervisados (SFT), optimizar tus propias preferencias, una función de recompensa por aprendizaje por refuerzo (RL) o un algoritmo de alineación publicado la semana pasada. Tan pronto como necesites configurar el procedimiento de formación por ti mismo, te encargarás de ese trabajo de infraestructura para ganar libertad algorítmica

. En la

actualidad, la personalización de modelos sin servidor en Amazon SageMaker AI se amplía con las API de las sesiones de entrenamiento, que eliminan esa desventaja al trazar el límite de abstracción un nivel más abajo. En lugar de abstraer el algoritmo, abstraen el cálculo. Operaciones como forward_backward (), optim_step () y sample () se convierten en llamadas a la API de SageMaker que puedes componer en cualquier procedimiento que requiera tu técnica: SFT, optimización de preferencias, RL o algo nuevo. Las llamadas tienen como objetivo una sesión activa y con estado, por lo que el modelo permanece cargado en las GPU a lo largo de los pasos y puedes generar tantas llamadas como necesites para evitarlo. El servicio gestiona la configuración del tiempo de ejecución, la ejecución distribuida, la sincronización gradual, la recuperación de errores, el aislamiento de los inquilinos y las operaciones de ejecución de las GPU a escala. Usted escribe el ciclo de entrenamiento y SageMaker AI ejecuta la infraestructura

.

Junto con el servicio, publicamos el recetario de sesiones de entrenamiento de SageMaker, un conjunto de recetas de SFT y RL listas para usar que puedes usar como modelo para tus propios ciclos de entrenamiento.

En este artículo, presentamos el modelo de programación y los tres clientes del SDK, y mostramos qué lugar ocupan las API de las sesiones de entrenamiento entre las opciones de entrenamiento y personalización del modelo de SageMaker AI. A continuación, desarmamos un ciclo mínimo de RL en los problemas matemáticos de la escuela primaria (GSM8K) para mostrar cómo encajan las operaciones y terminamos con una carga de trabajo real del libro de cocina: el aprendizaje por refuerzo en problemas de programación competitivos, en el que el código generado se califica comparándolo con pruebas unitarias.

¿Qué son las API de las sesiones de entrenamiento de SageMaker AI?

Con las API de sesiones de entrenamiento de SageMaker AI, puede dirigir una sesión en vivo respaldada por la GPU desde su propio proceso de Python en su máquina local. Usted llama a las operaciones y SageMaker AI las ejecuta en aceleradores gestionados cargados con el modelo base elegido más el adaptador de adaptación de bajo rango (LoRa). No hay ningún archivo de configuración que describa todo el trabajo desde el principio ni ningún paso de creación del clúster. Tú controlas lo que ocurre en cada paso, de forma interactiva, desde el código, para que puedas iterar y depurar rápidamente

.

La división de responsabilidades es la siguiente:

Te concentras en Tú escribes La IA de SageMaker gestiona
Sus datos, entornos de RL, agentes y algoritmos Un ciclo de entrenamiento de Python que llama a operaciones como forward_backward (), optim_step () y sample () para determinar los pasos que requieren GPU
Asignación de GPU, carga de modelos y LoRa, ejecución distribuida, recuperación de errores, almacenamiento en puntos de control y seguridad

La API se organiza en torno a tres clientes en el SDK de Python de SageMaker, que se crean en secuencia. Un ServiceClient contiene la configuración a nivel de plataforma (rol de ejecución, grupo de paquetes modelo, ubicación de salida de Amazon Simple Storage Service (Amazon S3) y, opcionalmente, una configuración de clave y nube privada virtual (VPC) de AWS Key Management Service (AWS KMS), que también puede anular por sesión) e inicia una sesión. El ServiceClient crea una instancia de TrainingClient (operaciones de entrenamiento y control, como forward, forward_backward, optim_step y save_weights_for_sampler), que a su vez crea una instancia de SamplingClient (sample y compute_logprobs, para su generación y puntuación durante las implementaciones y la evaluación). Cada llamada a la API se asigna a una operación de su ciclo. Una sesión activa también sirve como punto final de finalización de chat compatible con OpenAI, por lo que el código de cliente de OpenAI existente

puede tomar muestras de ella.
SageMaker Python SDK client hierarchy: ServiceClient creates a TrainingClient, which in turn creates a SamplingClient

Figura 1: La jerarquía de clientes del SDK de Python de SageMaker para las API de las sesiones de entrenamiento

Para el aprendizaje por refuerzo, el bucle tiene una forma característica. En la siguiente figura se muestra un paso de entrenamiento y dónde se ejecuta cada una de ellas: los pasos de color verde indican las API en las GPU gestionadas por servicios, y los pasos de color morado, que indican el control de bucles y la lógica de recompensas, se ejecutan en la máquina

.
One reinforcement learning training step, showing which operations run on managed GPUs and which run on the local client

Figura 2: Un paso de entrenamiento, con operaciones de muestreo, gradiente y punto de control en GPU administradas y lógica de recompensas y control de bucles en tu máquina

En

cada paso, se carga un lote de indicaciones y (1) muestras del modelo actual en la GPU. Luego, tu código Python (2) puntúa esos resultados: un verificador, una llamada al modelo de recompensa, un arnés de prueba, cualquier cosa que puedas expresar en código. (3) forward_backward y optim_step convierten las puntuaciones en una actualización de gradiente en la GPU, y (4) save_weights_and_get_sampling_client () actualiza el muestreador para que el siguiente paso se base en el

modelo actualizado.

Usted es el propietario de los datos, el control del bucle y la recompensa; la IA de SageMaker ejecuta las operaciones de muestreo, gradiente y punto de control vinculadas a la GPU. Las mismas primitivas abarcan el ajuste detallado supervisado (SFT) y otras técnicas de formación en LLM.

En el caso de SFT, elimina los pasos de muestreo y recompensa y llama a forward_backward con una pérdida de entropía cruzada en comparación con los ejemplos etiquetados.

¿Para quién es esto y dónde encaja en Amazon SageMaker AI?

Las API de las sesiones de entrenamiento son el punto de partida adecuado cuando necesita ciclos de iteración rápidos y libertad algorítmica, como una pérdida personalizada, una nueva señal de recompensa de RL o una canalización de varias etapas, pero no quiere aprovisionar ni gestionar la infraestructura de GPU usted mismo.

El uso se factura por token procesado, por lo que solo se te cobra por la computación que consume tu bucle. Si la función de recompensa tarda 10 segundos en puntuar un lote en tu máquina, no se facturará el tiempo de uso de la GPU mientras esté en ejecución. En comparación con la facturación por hora de la GPU, esto tiene dos ventajas prácticas. En primer lugar, la GPU inactiva no supone ningún coste: el cálculo de recompensas, la carga de datos, el registro y la depuración se realizan fuera del horario habitual, y solo se te factura cuando realizas una operación vinculada a la GPU. En segundo lugar, los costos varían en función del conjunto de datos y el volumen de generación, no en función del tiempo empleado o del tamaño del clúster, lo que facilita la previsión de los gastos y la comparación de los experimentos. El ahorro que supone reservar las GPU para toda la sesión puede resultar significativo para las cargas de trabajo que requieren una gran cantidad de cómputos locales, como los modelos de recompensas complejos, la implementación de múltiples herramientas

por parte de agencias o la evaluación automática.

Las API de las sesiones de entrenamiento están diseñadas para equipos cuyo trabajo está definido por el algoritmo de entrenamiento, no solo por el conjunto de datos. Como tú mismo compones el bucle, las mismas primitivas admiten el ajuste fino supervisado (SFT) con una pérdida de entropía cruzada sobre los datos etiquetados, el aprendizaje por refuerzo con ppo, importance_sampling o cispo (GRPO, PPO y otros métodos relacionados con los grupos) y los objetivos personalizados, como la optimización o la destilación de preferencias, creados a partir de las mismas piezas. Se ajustan a:

  • Investigadores posteriores a la capacitación y la alineación que implementan métodos de RL (GRPO, PPO, variantes de muestreo por importancia), estimadores de ventajas personalizados o nuevos objetivos.
  • Equipos que están realizando ajustes o optimizando las preferencias de forma supervisada y que necesitan una pérdida no estándar, un plan de estudios sobre datos o un proceso de varias etapas que las recetas basadas en la configuración no expresan.
  • Creadores de RL para agencias y de varios turnos que necesitan una lógica de implementación, una configuración de recompensas y planes de estudio personalizados.
  • Ingenieros de aprendizaje automático (ML) que han dejado de lado los ajustes basados en la configuración, pero que no quieren asumir la carga operativa que suponen los clústeres de GPU.
  • Los investigadores están adaptando el código de bucle de entrenamiento existente, ya que el modelo de programación basado en operaciones se asigna directamente a bucles escritos con API de bajo nivel forward_backward, optim_step y de muestra.

Los modelos base compatibles y las regiones de AWS en las que cada uno está disponible se enumeran en la documentación de las API de la sesión de formación.

Dónde caben las API de las sesiones de entrenamiento en Amazon SageMaker AI

Las API de las sesiones de entrenamiento ocupan un lugar destacado entre las opciones de personalización de modelos de SageMaker AI: tienen un control mucho mayor sobre el algoritmo de entrenamiento que el de la personalización de modelos sin servidor totalmente gestionada y tienen una propiedad operativa mucho menor que la formación en Amazon SageMaker Training Jobs o Amazon SageMaker HyperPod

.
Opción Control sobre la formación Infraestructura
Personalización del modelo sin servidor de SageMaker: API administradas Bajo: elija un modelo, configure los hiperparámetros disponibles y suministre los datos
Sin servidor, sin selección de instancias
Personalización del modelo sin servidor de SageMaker: API de sesiones de entrenamiento de SageMaker AI Alto: escribes el bucle y llamas a las primitivas
Sin servidor, sin selección de instancias
Empleos de formación de SageMaker Completo
Trabajos efímeros gestionados en los que se selecciona el tipo de instancia
HyperPod de SageMaker Completo Clústeres persistentes y gestionados con recuperación de fallos avanzada
Chart plotting control over the training algorithm against infrastructure you manage, showing training session APIs at high control and low infrastructure relative to other SageMaker AI options

Figura 3: Dónde encajan las API de las sesiones de entrenamiento entre las opciones de personalización del modelo en SageMaker AI

Anatomía de un ciclo de entrenamiento: el GRPO sobre problemas matemáticos

En esta sección se divide un ciclo de aprendizaje con un mínimo de refuerzo para mostrar cómo encajan las operaciones. La tarea es el GSM8K, un punto de referencia de aproximadamente 8500 problemas verbales matemáticos de primaria, cada uno con una sola respuesta numérica,

como en el siguiente ejemplo:

Natalia vendió clips a 48 de sus amigos en abril, y luego vendió la mitad en mayo. ¿Cuántos clips vendió Natalia en total en abril y mayo? → 72

Entrenamos un adaptador LoRa para el GPT-OSS 20B de OpenAI con optimización de políticas relativas de grupo (GRPO): para cada pregunta, el modelo genera varias respuestas, cada respuesta se califica según su exactitud y se refuerzan las respuestas que superan la media del grupo.

El ejemplo completo y ejecutable se encuentra en el repositorio de ejemplos de Amazon SageMaker.

Antes de abrir una sesión, complete los requisitos previos de la documentación.

Abra una sesión

Crea una sesión y, a continuación, obtén el tokenizador y un SamplingClient:

de sagemaker.train.training_session import ServiceClient, SamplingParams, AdamParams

svc = ServiceClient (role_arn=rol, region=región)

training_client = svc.create_lora_training_client (
 «openai/gpt-oss-20b», # un nombre de svc.list_base_models ()
 training_session_name=nombre_sesión,
 rank=32, alpha=64, # Rango de LoRa y factor de escalado
 model_package_group_arn=model_package_group_ARN,
 S3_OUTPUT_PATH=OUTPUT_S3_PATH,
)
tokenizer = training_client.get_tokenizer ()
sampling_client = training_client.create_sampling_client
()

Defina la recompensa y la ventaja

La lógica específica de la tarea consiste en dos funciones breves que se ejecutan en su máquina:

def compute_reward (response_text, ground_truth):
 predicted = extract_answer (response_text) # analiza el número después de «####»
 devuelve 1.0 si se predice == ground_truth en caso contrario 0.0

def compute_advantages (recompensas):
 recompensas = np.array (recompensas)
 ventajas = recompensas: rewards.mean () # se centra en el grupo (la línea de base del GRPO)
 ventajas de devolución/(rewards.std () + 1e-8) # normalizar

El bucle

Cada paso sigue las cuatro etapas que se muestran en la Figura 2. draw, build_prompt y build_training_datum son los ayudantes abreviados

del ejemplo:
para un paso del rango (NUM_STEPS):
 datos, pendientes = [], []
 # (1) muestra K respuestas por pregunta en una solicitud cada una (GPU); devuelve un futuro de inmediato
 para la pregunta, ground_truth in draw (PROMPTS_PER_STEP): # la carga de datos es local
 prompt = tokenizer.encode (build_prompt (question), ADD_SPECIAL_TOKENS=false)
 pending.append (prompt), ground_truth, sampling_client.sample (
 mensaje, num_samples=K,
 sampling_params=samplingParams (max_tokens=512, temperatura=0,7, top_p=0,9)))

 para prompt, ground_truth, el futuro está pendiente:
 result = future.result () # espere una vez que el lote esté en marcha
 # (2) puntúa cada respuesta y luego centra las recompensas dentro del grupo (local)
 rewards = [compute_reward (tokenizer.decode (s.tokens), ground_truth) para s en result.sequences]
 ventajas = compute_advantage (recompensas)
 datums += [build_training_datum (prompt, s, a) para s, en zip (result.sequences, advantages)]

 # (3) un paso de gradiente por encima del lote (GPU); el paso del optimizador se secuencia detrás de él
 fwd_bwd_op = training_client.forward_backward (datums, loss_fn="ppo»)
 optim_op = training_client.optim_step (AdamParams (learning_rate=1e-5))
 fwd_bwd_op.result (), optim_op.result ()

 # (4) actualiza el muestreador para que las implementaciones del siguiente paso provengan de la política actualizada (GPU)
 sampling_client = training_client.save_weights_and_get_sampling_client ()

training_client.stop
()

Tres detalles hacen que este bucle funcione:

Las operaciones devuelven futuros. Cada llamada vinculada a la GPU devuelve una APIFuture inmediatamente: la solicitud se pone en cola y la envía un remitente en segundo plano, y .result () espera el valor. El bucle envía todas las solicitudes de muestreo de un paso antes de esperar a que llegue alguna de ellas, por lo que todo el lote se genera de forma simultánea.

Las operaciones de entrenamiento se ejecutan en el orden en que se llaman, por lo que optim_step se puede enviar antes de que forward_backward haya finalizado.

El datum contiene todo lo que necesita la pérdida.

build_training_datum incluye los símbolos de aviso y de respuesta, los logprobs de muestra () por token, la ventaja y una máscara de ponderación que evita que el indicador sufra pérdidas.

Los puntos de control son paquetes modelo. Cada vez que se guarda, se registra una versión en el grupo de paquetes modelo, incluida la actualización del muestreador paso a paso que se muestra en el ciclo anterior. Tras el entrenamiento, otras dos partidas guardadas añaden un modelo fusionado para el despliegue y un estado que se puede reanudar con ponderaciones

y un optimizador.
training_client.save_weights_for_sampler (MERGE_WEIGHTS=true) .result () # modelo fusionado y desplegable
training_client.save_state () .result () # estado reanudable (ponderaciones + optimizador)

Para reanudar, inicie una nueva sesión desde el punto de control más reciente con create_training_client_from_state_with_optimizer.

Una sesión en ejecución se descuenta de tu cuota de sesiones simultáneas hasta que llames a stop () o hasta que caduque, por lo que debes detenerla cuando termines, incluso en las rutas de error, o abrir el cliente en un bloque con. El punto de control fusionado se implementa en un punto final en tiempo real.

Si prefieres usar los puntos de control como adaptadores LoRa, consulta el cuaderno de implementación del recetario.

Cuando analizamos la muestra, con 10 pasos de capacitación sobre 40 problemas, la precisión mantenida pasó del 56 al 75 por ciento.

Una carga de trabajo real: RL sobre programación competitiva

El

GSM8K mantiene la mecánica a la vista, pero una carga de trabajo basada en la producción aporta más: generaciones más largas, interacción en varios turnos, una niveladora externa y un rendimiento suficiente para mantener las GPU ocupadas. Los libros de cocina de las sesiones de formación de SageMaker incluyen paquetes que se diseñan para crear ciclos de entrenamiento reutilizables basados en las mismas operaciones. Para una nueva tarea de RL, se escribe un entorno: lo que ve el modelo, cómo se puntúa su respuesta y si obtiene otro turno. El recetario gestiona el procesamiento por lotes, las plantillas de chat, la estimación de las ventajas, la superposición del muestreo y el entrenamiento, la validación, la verificación con el currículum y las métricas por paso, y registra la configuración de cada ejecución para que pueda repetirse. La receta code_rl lo usa para entrenar

un modelo sobre problemas de programación competitivos.

La tarea. Los problemas provienen del conjunto de datos de DeepCoder (PrimeIntellect, TACO y LiveCodeBench para la formación; Codeforces y LiveCodeBench para las pruebas). El modelo escribe una solución de Python, que se ejecuta con las pruebas unitarias del problema en un contenedor SandboxFusion de tu máquina. La recompensa es de 1 cuando se aprueban todas las pruebas y de 0 en caso contrario, con una penalización de 0,1 si la respuesta no contiene ningún bloque de código

.

Uso de herramientas de varios turnos. En dos turnos, el modelo puede utilizar una herramienta check_solution, leer los resultados de la prueba y revisar su respuesta antes de la calificación final. Las llamadas a la herramienta y los resultados se representan en el formato de chat nativo del modelo, por lo que el modelo se entrena con el mismo formato de token que utiliza en

la inferencia.

Qué aporta la receta al ciclo mínimo:

Code RL setup: a local training loop and SandboxFusion container on the left, and managed GPUs running GPT-OSS 20B with a LoRA adapter on the right

Figura 4: Configuración de Code RL, con el bucle de entrenamiento local y el sandbox a la izquierda y las GPU administradas a la derecha

Entrenamos un adaptador LoRa (rango 32) para el GPT-OSS 20B en 50 pasos, cada uno con 128 problemas y 8 respuestas por problema, usando dos turnos y un límite de k=3. La recompensa por entrenamiento aumentó del 0,46 al 0,60, y la precisión en 200 problemas superados aumentó del 40 al 50,5 por ciento.

Para ejecutarlo, abre el entorno de pruebas y ejecuta la receta:

bash tools/sandbox_up.sh
python -m training_sessions_cookbook.recipes.code_rl.train\
 --config training_sessions_cookbook/recipes/code_rl/configs/coderl_oss20b_service.json\
 --max_steps_off_policy 3 --stale_policy requeue --num_rollout_workers 80 --max_steps 50\
 --base_model_arn «$BASE_MODEL_ARN»\
 --model_package_group_ARN «$MODEL_PACKAGE_GROUP_ARN»\
 --role_ARN «$ROLE_ARN»\
 --output_s3_path «$OUTPUT_S3_PATH
»

El recetario contiene más recetas sobre la misma estructura, como el ajuste supervisado de los conjuntos de datos de chat (Tulu 3, UltraChat), el RL en GSM8K a gran escala y la alineación de las preferencias de KTO a partir de la retroalimentación binaria. El README de cada receta muestra sus comandos

, hiperparámetros y métricas esperadas.

Conclusión

Las API de las sesiones de entrenamiento de SageMaker AI trasladan el límite de la abstracción a la operación de entrenamiento: usted escribe el ciclo de entrenamiento en Python en su propia máquina y el servicio lo ejecuta en GPU administradas, gestionando la carga de modelos y LoRa, la ejecución distribuida, la recuperación de errores y los puntos de control. Un bucle GRPO completo se reduce a cuatro operaciones: sample, forward_backward, optim_step y save_weights_and_get_sampling_client, con la lógica de recompensa y ventaja en tu propio código. Las mismas operaciones se escalan a RL de varios turnos, que utilizan herramientas y con gradación en espacio aislado, tal y como se muestra en la receta de Code RL.

Las recompensas personalizadas, las implementaciones por agencia, la depuración paso a paso y las nuevas técnicas publicadas utilizan el mismo modelo de programación: el algoritmo sigue el mismo ciclo de programación y SageMaker AI ejecuta las GPU.

Para empezar:

Agradecimientos

Gracias a Arun Nagarajan, Xichao Wang y Shruti Sharma por sus contribuciones y orientación para esta publicación.


Acerca de los autores

Nicolas Jourdan

Nicolás Jourdan

Nicolas es un arquitecto sénior de soluciones especializado en inteligencia artificial y aprendizaje automático en AWS, con sede en Fráncfort (Alemania). Ayuda a los clientes a crear cargas de trabajo de inteligencia artificial y aprendizaje automático en AWS, desde las primeras decisiones de diseño hasta la producción. Sus áreas de enfoque incluyen la personalización de modelos, la capacitación distribuida y la inferencia. Antes de unirse a AWS, trabajó como científico investigador y gerente de ingeniería en aplicaciones para la conducción autónoma, los drones y la fabricación, y posee patentes en materia de detección de objetos y detección de anomalías

.
Bruno Pistone

Bruno Pistone

Bruno es un arquitecto sénior mundial especializado en soluciones de inteligencia artificial y aprendizaje automático generativas en AWS, con sede en Milán (Italia). Trabaja con los equipos de productos de AWS y con grandes clientes para ayudarlos a comprender plenamente sus necesidades técnicas y diseñar soluciones de inteligencia artificial y aprendizaje automático que aprovechen al máximo la nube de AWS y el paquete de aprendizaje automático de Amazon. Su experiencia incluye cargas de trabajo distribuidas de entrenamiento e inferencia, personalización de modelos, inteligencia artificial generativa y aprendizaje automático integral. Le gusta pasar tiempo con amigos, explorar nuevos lugares y viajar a

nuevos destinos.
Giuseppe Angelo Porcelli

Giuseppe Angelo Porcelli

Giuseppe es el principal arquitecto de soluciones especializado en aprendizaje automático de Amazon Web Services. Con varios años de experiencia en ingeniería de software y aprendizaje automático, trabaja con clientes de cualquier tamaño para comprender sus necesidades empresariales y técnicas y diseñar soluciones de inteligencia artificial y aprendizaje automático que aprovechen al máximo la nube de AWS y el sistema de aprendizaje automático de Amazon. Ha trabajado en proyectos en diferentes ámbitos, incluidos los MLOP, la visión artificial y la PNL, que incluyen un amplio conjunto de servicios de AWS. En su tiempo libre, a Giuseppe

le gusta jugar al fútbol.
Pooja Karadgi

Pooja Karadgi

Pooja es gerente sénior de productos en AWS y lidera la personalización de modelos para Amazon SageMaker AI. Se centra en hacer que los modelos básicos sean accesibles y prácticos para su uso en producción, ayudando a los clientes a adaptarlos a sus dominios específicos mediante técnicas como el aprendizaje por refuerzo. También ha trabajado en experiencias de desarrolladores y administradores en SageMaker Studio, abarcando el ciclo de vida del aprendizaje automático, desde la experimentación hasta la producción

.

¿Tiene un proyecto de software o plataforma SaaS en mente?

Hable directamente con nuestros arquitectos de software en SoftAndino. Le brindamos asesoría técnica y cotización inmediata sin compromiso.