Todos os produtos
Search
Central de documentação

MaxCompute:Develop AI Functions on GU resources

Última atualização: Jun 27, 2026

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:

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())
Importante

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.
)
Nota

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 messages para dar suporte a conversas com múltiplos turnos.

  • Use a função system para 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

query

string

Entrada original

generated_text

string

Resposta gerada pelo modelo

finish_reason

string

Motivo da conclusão: stop ou length

usage.prompt_tokens

int

Quantidade de tokens de entrada

usage.completion_tokens

int

Quantidade de tokens de saída

usage.total_tokens

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

gu=2 é adequado para modelos 4B — modelos maiores exigem mais GU

Grau de paralelismo

O MaxFrame agenda jobs simultâneos automaticamente; controle isso com num_workers

Cache de resultados intermediários

Use to_odps_table() para salvar tabelas intermediárias e evitar reprocessamento

Tempo limite

Adicione timeout=3600 para impedir que os jobs fiquem travados

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.