Tous les produits
Search
Centre de documentation

MaxCompute:Develop AI Functions on GU resources

Dernière mise à jour :Aug 10, 2026

MaxFrame AI Function est une solution de bout en bout pour l'inférence hors ligne de grands modèles de langage (LLM) dans MaxCompute. Elle associe le traitement des données aux capacités d'IA et vous permet d'exécuter l'inférence LLM par lots directement sur les ressources de quota GPU (GU), sans quitter votre flux de travail d'entrepôt de données.

Cette rubrique explique comment appeler un LLM géré à l'aide de llm.generate sur des ressources GU.

Démarrage rapide

L'extrait de code suivant présente l'appel minimal de bout en bout. Consultez les sections ci-dessous pour obtenir des détails sur les paramètres et des conseils de débogage.

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érequis

Avant de commencer, assurez-vous de disposer des éléments suivants :

  • Kit de développement logiciel (SDK) MaxFrame version 2.3.0 ou ultérieure

  • Python 3.11

  • Un quota GU activé pour votre projet MaxCompute. Pour plus d'informations, consultez la section Achat et utilisation des ressources de calcul IA MaxCompute

  • Au moins des autorisations de lecture et d'écriture au niveau du projet pour MaxCompute

Configurer l'environnement

Le code suivant initialise une session MaxFrame et lui attribue un quota GU. Toutes les tâches LLM suivantes s'exécutent dans cette session.

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

Le paramètre gu_quota_name est requis pour utiliser les ressources GU. Sans ce paramètre, les tâches d'inférence ne sont pas distribuées aux workers GPU.

Appeler un LLM géré

Les quatre étapes ci-dessous utilisent llm.generate pour soumettre une tâche d'inférence asynchrone à un modèle géré.

Étape 1 : Préparer les données d'entrée

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

Étape 2 : Initialiser l'instance LLM

ManagedTextGenLLM est le client destiné aux modèles de génération de texte gérés hébergés sur MaxCompute. Indiquez le nom exact du modèle pour identifier celui à utiliser.

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

Une faute de frappe ou une incompatibilité de version dans le nom du modèle entraîne l'échec de la tâche. Pour la liste complète des modèles pris en charge, consultez la section Modèles pris en charge pour MaxFrame AI Function.

Étape 3 : Définir le modèle d'invite

messages = [
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "Please answer the following question: {query}"},
]

Syntaxe du modèle :

  • Utilisez {column_name} comme espace réservé. Il est automatiquement remplacé par la valeur de la colonne DataFrame correspondante au moment de l'exécution.

  • Transmettez une liste messages pour prendre en charge les conversations multi-tours.

  • Utilisez le rôle system pour définir le comportement du modèle.

Étape 4 : Exécuter la tâche de génération

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

Schéma de sortie

result_df est un DataFrame MaxFrame contenant les champs suivants :

Champ

Type

Description

query

string

Entrée d'origine

generated_text

string

Réponse générée par le modèle

finish_reason

string

Raison de l'achèvement : stop ou length

usage.prompt_tokens

int

Nombre de jetons d'entrée

usage.completion_tokens

int

Nombre de jetons de sortie

usage.total_tokens

int

Nombre total de jetons

Performances et débogage

Optimisation des performances

Optimisation

Recommandation

Taille du lot

Limitez chaque lot à moins de 100 éléments pour éviter les erreurs de dépassement de mémoire (OOM)

Allocation GU

gu=2 convient aux modèles 4B ; les modèles plus volumineux nécessitent davantage de GU

Degré de parallélisme

MaxFrame planifie automatiquement les travaux concurrents. Contrôlez ce paramètre avec num_workers

Mise en cache des résultats intermédiaires

Utilisez to_odps_table() pour enregistrer les tables intermédiaires et éviter le recalcul

Délai d'expiration

Ajoutez timeout=3600 pour empêcher les travaux de se bloquer

Conseils de débogage

Afficher les journaux d'exécution

print(session.get_logview_address())  # Click the link to view real-time MaxFrame job logs.

Exécuter un test à petite échelle avant l'exécution complète

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

Vérifier l'utilisation des ressources

Consultez l'état d'exécution détaillé des travaux dans MaxFrame Logview.