MaxFrame AI Function es una solución integral para la inference de modelos de lenguaje grandes (LLM) sin conexión en MaxCompute. Combina el procesamiento de datos con capacidades de inteligencia artificial y le permite ejecutar la inference por lotes de LLM directamente en los recursos de cuota de recursos GPU (GU), sin salir del flujo de trabajo de su almacén de datos.
Este tema muestra cómo llamar a un LLM administrado mediante llm.generate en recursos GU.
Inicio rápido
A continuación se muestra la llamada integral mínima. Consulte las secciones posteriores para conocer los detalles de cada parámetro y las recomendaciones de depuración.
import os
import maxframe.dataframe as md
from maxframe import new_session
from maxframe.config import options
from maxframe.learn.contrib.llm.models.managed import ManagedTextGenLLM
from odps import ODPS
# Initialize session
o = ODPS(
os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
project='<your project>',
endpoint='https://service.cn-<your region>.maxcompute.aliyun.com/api',
)
session = new_session(o)
options.session.gu_quota_name = "<your GU quota name>" # Required to route tasks to GPU workers.
# Prepare input data
df = md.DataFrame({"query": ["What is the boiling point of water?"]})
# Initialize the managed LLM client
llm = ManagedTextGenLLM(name="Qwen3-4B-Instruct-2507-FP8") # Name must be an exact match.
# Define the prompt template and run inference
messages = [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Please answer the following question: {query}"},
]
result_df = llm.generate(df, prompt_template=messages)
result_df.execute()
Requisitos previos
Antes de empezar, compruebe que cuenta con lo siguiente:
El kit de desarrollo de software (SDK) de MaxFrame en la versión 2.3.0 o posterior.
Python 3.11.
Una cuota GU habilitada para su proyecto de MaxCompute. Para más información, consulte Compra y uso de recursos de cómputo de IA de MaxCompute.
Permisos de lectura y escritura para MaxCompute, como mínimo a nivel de proyecto.
Configuración del entorno
El código a continuación inicializa una sesión de MaxFrame y le asigna una cuota GU. Todas las tareas de LLM posteriores se ejecutan dentro de esta sesión.
import os
import maxframe.dataframe as md
import numpy as np
from maxframe import new_session
from maxframe.config import options
from maxframe.udf import with_running_options # Helper for attaching resource options to UDF-based tasks.
from odps import ODPS
import logging
# Route tasks to the DPE and MCSQL engines; disable SPE for GPU workloads.
options.dag.settings = {
"engine_order": ["DPE", "MCSQL"],
"unavailable_engines": ["SPE"],
}
logging.basicConfig(level=logging.INFO)
# Initialize the MaxFrame session with your project credentials.
o = ODPS(
# Make sure the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is set to your AccessKey ID,
# and the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is set to your AccessKey secret.
# Do not use the AccessKey ID and AccessKey secret strings directly.
os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
project='<your project>',
endpoint='https://service.cn-<your region>.maxcompute.aliyun.com/api',
)
session = new_session(o)
options.session.gu_quota_name = "xxxxx" # Replace with your GU quota name.
print("LogView address:", session.get_logview_address())
El parámetro gu_quota_name es obligatorio para usar recursos GU. Sin este valor, las tareas de inference no se envían a los trabajadores GPU.
Llamada a un LLM administrado
Los cuatro pasos siguientes utilizan llm.generate para enviar una tarea de inference asíncrona a un modelo administrado.
Paso 1: Preparar los datos de entrada
import pandas as pd
from IPython.display import HTML
# Set display options for debugging.
pd.set_option("display.max_colwidth", None)
pd.set_option("display.max_columns", None)
HTML("<style>div.output_area pre {white-space: pre-wrap;}</style>")
# Create a query list.
query_list = [
"What is the average distance between the Earth and the Sun?",
"In what year did the American Revolutionary War begin?",
"What is the boiling point of water?",
"How can I quickly relieve a headache?",
"Who is the main character in the Harry Potter series?",
]
# Convert to a MaxFrame DataFrame.
df = md.DataFrame({"query": query_list})
df.execute()
Paso 2: Inicializar la instancia de LLM
ManagedTextGenLLM es el cliente para los modelos de generación de texto administrados alojados en MaxCompute. Pase el nombre exacto del modelo para identificar cuál se utilizará.
from maxframe.learn.contrib.llm.models.managed import ManagedTextGenLLM
llm = ManagedTextGenLLM(
name="Qwen3-4B-Instruct-2507-FP8" # The model name must be an exact match.
)
Un error tipográfico o una discrepancia de versión en el nombre del modelo provoca que la tarea falle. Para consultar la lista completa de modelos compatibles, revise Supported models for MaxFrame AI Function.
Paso 3: Definir la plantilla de indicaciones
messages = [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Please answer the following question: {query}"},
]
Sintaxis de la plantilla:
Utilice
{column_name}como marcador de posición. Durante la ejecución, se reemplaza automáticamente por el valor de la columna correspondiente del DataFrame.Pase una lista
messagespara admitir conversaciones de varios turnos.Use el rol
systempara definir el comportamiento del modelo.
Paso 4: Ejecutar la tarea de generación
result_df = llm.generate(
df, # Input DataFrame
prompt_template=messages,
running_options={
"max_tokens": 4096, # Maximum output length
"verbose": True # Enable verbose log output
},
params={"temperature": 0.7},
)
# Execute and get the result.
result_df.execute()
Esquema de salida
result_df es un DataFrame de MaxFrame que contiene los siguientes campos:
|
Field |
Type |
Description |
|
|
string |
Entrada original |
|
|
string |
Respuesta generada por el modelo |
|
|
string |
Motivo de finalización: |
|
|
int |
Número de tokens de entrada |
|
|
int |
Número de tokens de salida |
|
|
int |
Número total de tokens |
Rendimiento y depuración
Optimización del rendimiento
|
Optimization |
Recommendation |
|
Tamaño de lote |
Mantenga cada lote por debajo de 100 elementos para evitar errores de falta de memoria (OOM). |
|
Asignación de GU |
El valor |
|
Grado de paralelismo |
MaxFrame programa automáticamente trabajos concurrentes. Controle este comportamiento con |
|
Almacenamiento de resultados intermedios en caché |
Utilice |
|
Tiempo de espera |
Agregue |
Recomendaciones de depuración
Consultar los registros de ejecución
print(session.get_logview_address()) # Click the link to view real-time MaxFrame job logs.
Ejecutar una prueba a pequeña escala antes de la ejecución completa
df_sample = df.head(2) # Use two rows for testing.
result_sample = llm.generate(df_sample, prompt_template=messages, running_options={"gu": 2})
result_sample.execute()
Comprobar el uso de recursos
Consulte el estado detallado de ejecución del trabajo en MaxFrame Logview.