A MaxFrame AI Function é uma solução completa para inferência offline de modelos de linguagem grandes (LLM) no MaxCompute. Ela integra o processamento de dados a capacidades de IA, permitindo executar inferência em lote de LLM diretamente na cota de recursos GPU (GU) sem sair do fluxo de trabalho do seu data warehouse.
Este tópico mostra como chamar um LLM gerenciado usando llm.generate em recursos GU.
Início rápido
O trecho a seguir apresenta a chamada completa mínima. Consulte as seções abaixo para obter detalhes sobre parâmetros e orientações de depuração.
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()
Pré-requisitos
Antes de começar, verifique se você possui:
Kit de desenvolvimento de software (SDK) do MaxFrame versão 2.3.0 ou posterior
Python 3.11
Uma cota GU ativada para seu projeto MaxCompute — consulte Comprar e usar recursos de computação de IA do MaxCompute
Permissões de leitura e gravação no nível do projeto para o MaxCompute
Configure o ambiente
O código a seguir inicializa uma sessão do MaxFrame e atribui uma cota GU a ela. Todas as tarefas subsequentes de LLM são executadas nessa sessão.
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())
gu_quota_name é obrigatório para usar recursos GU. Sem esse parâmetro, as tarefas de inferência não são enviadas aos workers GPU.
Chame um LLM gerenciado
As quatro etapas abaixo utilizam llm.generate para enviar uma tarefa de inferência assíncrona a um modelo gerenciado.
Etapa 1: Prepare os dados 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()
Etapa 2: Inicialize a instância do LLM
ManagedTextGenLLM é o cliente para modelos de geração de texto gerenciados hospedados no MaxCompute. Informe o nome exato do modelo para identificar qual deles será usado.
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.
)
Um erro de digitação ou incompatibilidade de versão no nome do modelo causa falha na tarefa. Para obter a lista completa de modelos suportados, consulte Modelos suportados para MaxFrame AI Function.
Etapa 3: Defina o modelo de prompt
messages = [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Please answer the following question: {query}"},
]
Sintaxe do modelo:
Use
{column_name}como espaço reservado. O sistema substitui esse valor automaticamente pelo conteúdo da coluna correspondente do DataFrame durante a execução.Forneça uma lista
messagespara dar suporte a conversas com múltiplos turnos.Use a função
systempara definir o comportamento do modelo.
Etapa 4: Execute a tarefa de geração
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 saída
result_df é um DataFrame do MaxFrame com os seguintes campos:
|
Campo |
Tipo |
Descrição |
|
|
string |
Entrada original |
|
|
string |
Resposta gerada pelo modelo |
|
|
string |
Motivo da conclusão: |
|
|
int |
Quantidade de tokens de entrada |
|
|
int |
Quantidade de tokens de saída |
|
|
int |
Total de tokens |
Desempenho e depuração
Otimização de desempenho
|
Otimização |
Recomendação |
|
Tamanho do lote |
Mantenha cada lote com menos de 100 itens para evitar erros de falta de memória (OOM) |
|
Alocação de GU |
|
|
Grau de paralelismo |
O MaxFrame agenda jobs simultâneos automaticamente; controle isso com |
|
Cache de resultados intermediários |
Use |
|
Tempo limite |
Adicione |
Dicas de depuração
Visualize logs de execução
print(session.get_logview_address()) # Click the link to view real-time MaxFrame job logs.
Execute um teste em pequena escala antes da execução 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()
Verifique o uso de recursos
Consulte o status detalhado da execução do job no Logview do MaxFrame.