Todos os produtos
Search
Central de documentação

Platform For AI:Implante um aplicativo MLLM no EAS

Última atualização: Sep 22, 2026

O Elastic Algorithm Service (EAS) permite implantar um serviço de inferência MLLM com um único clique em cinco minutos. Este tópico descreve como implantar e chamar o serviço de inferência MLLM.

Contexto

Nos últimos anos, os grandes modelos de linguagem (LLMs) alcançaram um sucesso sem precedentes em tarefas de linguagem. Eles não apenas se destacam na geração de texto em linguagem natural, mas também demonstram capacidades robustas em cenários multitarefa, como análise de sentimentos, tradução automática e sumarização de texto. No entanto, esses modelos se limitam ao texto e não conseguem processar outras modalidades de dados, como imagens, áudio ou vídeo.

Isso impulsionou um aumento nas pesquisas sobre grandes modelos de linguagem multimodais (MLLMs). Com a adoção generalizada de modelos como o GPT-4o na indústria, os MLLMs se tornaram uma aplicação popular.

O EAS oferece uma solução com um único clique para automatizar a implantação de MLLMs. Você pode implantar um serviço de inferência MLLM popular em apenas cinco minutos.

Pré-requisitos

Implante o serviço do EAS

  1. Faça logon no PAI console. Na parte superior da página, selecione uma região. Em seguida, selecione o workspace desejado e clique em Enter Elastic Algorithm Service (EAS).

  2. Clique em Deploy Service. Na seção Inference Service, clique em Custom Deployment na seção Custom Model Deployment.

  3. Na página Custom Deployment, configure os seguintes parâmetros principais. Para obter informações sobre outros parâmetros, consulte Custom Deployment.

    Parâmetro

    Descrição

    Environment Information

    Deployment Method

    Selecione Image-based Deployment e marque a caixa de seleção Enable Web App.

    Image Configuration

    Na lista de imagens oficiais, selecione chat-mllm-webui > chat-mllm-webui:1.0.

    Nota

    Como as versões são atualizadas com frequência, atualize para a versão mais recente da imagem.

    Command to Run

    Após selecionar uma imagem, o comando é configurado automaticamente. Modifique o model_type para implantar modelos diferentes. Para obter uma lista dos modelos suportados, consulte a tabela Models abaixo.

    Resource Information

    Deployment

    Selecione um tipo de instância acelerada por GPU. Recomendamos o uso de ml.gu7i.c16m60.1-gu30 para obter o melhor custo-benefício.

    Modelos

    model_type

    Link do modelo

    qwen_vl_chat

    qwen/Qwen-VL-Chat

    qwen_vl_chat_int4

    qwen/Qwen-VL-Chat-Int4

    qwen_vl

    qwen/Qwen-VL

    glm4v_9b_chat

    ZhipuAI/glm-4v-9b

    llava1_5-7b-instruct

    swift/llava-1___5-7b-hf

    llava1_5-13b-instruct

    swift/llava-1___5-13b-hf

    internvl_chat_v1_5_int8

    AI-ModelScope/InternVL-Chat-V1-5-int8

    internvl-chat-v1_5

    AI-ModelScope/InternVL-Chat-V1-5

    mini-internvl-chat-2b-v1_5

    OpenGVLab/Mini-InternVL-Chat-2B-V1-5

    mini-internvl-chat-4b-v1_5

    OpenGVLab/Mini-InternVL-Chat-4B-V1-5

    internvl2-2b

    OpenGVLab/InternVL2-2B

    internvl2-4b

    OpenGVLab/InternVL2-4B

    internvl2-8b

    OpenGVLab/InternVL2-8B

    internvl2-26b

    OpenGVLab/InternVL2-26B

    internvl2-40b

    OpenGVLab/InternVL2-40B

  4. Após configurar os parâmetros, clique em Deploy.

Chame o serviço

Use o WebUI para inferência de modelo

  1. Na página Elastic Algorithm Service (EAS), clique no nome do serviço de destino. No canto superior direito da página, clique em View Web App para abrir o WebUI.

  2. Na página do WebUI, visualize a inferência do modelo. Opcionalmente, faça o upload de uma imagem na área de upload de imagens à esquerda. Na caixa de texto na parte inferior, insira sua pergunta e clique em Send para gerar uma resposta.

Use a API para inferência de modelo

  1. Obtenha o endpoint e o token do serviço.

    1. Na página Elastic Algorithm Service (EAS), clique no nome do serviço de destino. Na seção Basic Information, clique em View Endpoint Information.

    2. No painel Invocation Method, obtenha o token e o endpoint do serviço.

  2. Use a API para inferência de modelo.

    O PAI fornece as três operações de API a seguir:

    Executar inferência

    Recupera o resultado da inferência.

    Nota

    O WebUI e a API são mutuamente exclusivos. Se você usou o WebUI, é necessário chamar a operação clear chat history antes de chamar a operação infer forward.

    Substitua os seguintes parâmetros principais no código de exemplo:

    Parâmetro

    Descrição

    hosts

    O endpoint do serviço obtido na Etapa 1.

    authorization

    O token do serviço obtido na Etapa 1.

    prompt

    O conteúdo do seu prompt. Recomendamos o uso de inglês.

    image_path

    O caminho local para a imagem.

    Parâmetros de requisição e resposta

    • A tabela a seguir lista os parâmetros de requisição.

      Parâmetro

      Tipo

      Descrição

      Padrão

      prompt

      String

      O conteúdo do prompt.

      Nenhum. Obrigatório.

      image

      Codificado em Base64

      A imagem de entrada.

      Nenhum

      chat_history

      List[List]

      O histórico de chat.

      []

      temperature

      Float

      Controla a aleatoriedade da saída do modelo. Um valor maior aumenta a aleatoriedade, enquanto um valor de 0 produz uma saída determinística. Os valores válidos variam de 0 a 1.

      0.2

      top_p

      Float

      Controla a diversidade selecionando os tokens mais prováveis cuja probabilidade acumulada excede o valor de top_p.

      0.7

      max_output_tokens

      Int

      O comprimento máximo da saída, em tokens.

      512

      use_stream

      Bool

      Especifica se deve usar a saída em streaming:

      • True

      • False

      True

    • A saída é a resposta ao prompt, retornada como uma string.

    O código de exemplo a seguir mostra como chamar a API em Python:

    import requests
    import json
    import base64
    def post_get_history(url='http://127.0.0.1:7860', headers=None):
        r = requests.post(f'{url}/get_history', headers=headers, timeout=1500)
        data = r.content.decode('utf-8')
        return data
    def post_infer(prompt, image=None, chat_history=[], temperature=0.2, top_p=0.7, max_output_tokens=512, use_stream = True, url='http://127.0.0.1:7860', headers={}):
        datas = {
            "prompt": prompt,
            "image": image,
            "chat_history": chat_history,
            "temperature": temperature,
            "top_p": top_p,
            "max_output_tokens": max_output_tokens,
            "use_stream": use_stream,
        }
        if use_stream:
            headers.update({'Accept': 'text/event-stream'})
            response = requests.post(f'{url}/infer_forward', json=datas, headers=headers, stream=True, timeout=1500)
            if response.status_code != 200:
                print(f"Request failed with status code {response.status_code}")
                return
            process_stream(response)
        else:
            r = requests.post(f'{url}/infer_forward', json=datas, headers=headers, timeout=1500)
            data = r.content.decode('utf-8')
            print(data)
    def image_to_base64(image_path):
        """
        Convert an image file to a Base64 encoded string.
        :param image_path: The local path to the image.
        :return: A Base64 encoded string representation of the image.
        """
        with open(image_path, "rb") as image_file:
            # Read the binary data of the image
            image_data = image_file.read()
            # Encode the binary data to Base64
            base64_encoded_data = base64.b64encode(image_data)
            # Convert bytes to string and remove any trailing newline characters
            base64_string = base64_encoded_data.decode('utf-8').replace('\n', '')
        return base64_string
    def process_stream(response, previous_text=""):
        MARK_RESPONSE_END = '##END'  # DO NOT CHANGE
        buffer = previous_text
        current_response = ""
        for chunk in response.iter_content(chunk_size=100):
            if chunk:
                text = chunk.decode('utf-8')
                current_response += text
                parts = current_response.split(MARK_RESPONSE_END)
                for part in parts[:-1]:
                    new_part = part[len(previous_text):]
                    if new_part:
                        print(new_part, end='', flush=True)
                    previous_text = part
                current_response = parts[-1]
        remaining_new_text = current_response[len(previous_text):]
        if remaining_new_text:
            print(remaining_new_text, end='', flush=True)
    if __name__ == '__main__':
        # Replace <service_url> with the service endpoint.
        hosts = '<service_url>'
        # Replace <token> with the service token.
        head = {
            'Authorization': '<token>'
        }
        # get chat history
        chat_history = json.loads(post_get_history(url=hosts, headers=head))['chat_history']
        # The content of your prompt. We recommend using English.
        prompt = 'Please describe the image'
        # Replace path_to_your_image with the local path of your image.
        image_path = 'path_to_your_image'
        image_base_64 = image_to_base64(image_path)
        post_infer(prompt = prompt, image = image_base_64, chat_history = chat_history, use_stream=False, url=hosts, headers=head) 
    

    Obter histórico de chat

    Recupera o histórico de chat.

    • Substitua os seguintes parâmetros principais no código de exemplo:

      Parâmetro

      Descrição

      hosts

      O endpoint do serviço obtido na Etapa 1.

      authorization

      O token do serviço obtido na Etapa 1.

    • Nenhum parâmetro de entrada é necessário.

    • A tabela a seguir lista os parâmetros de saída.

      Parâmetro

      Tipo

      Descrição

      chat_history

      List[List]

      O histórico de chat.

    O código de exemplo a seguir mostra como chamar a API em Python:

    import requests
    import json
    def post_get_history(url='http://127.0.0.1:7860', headers=None):
        r = requests.post(f'{url}/get_history', headers=headers, timeout=1500)
        data = r.content.decode('utf-8')
        return data
    if __name__ == '__main__':
        # Replace <service_url> with the service endpoint.
        hosts = '<service_url>'
        # Replace <token> with the service token.
        head = {
            'Authorization': '<token>'
        }
        chat_history = json.loads(post_get_history(url=hosts, headers=head))['chat_history']
        print(chat_history)
    

    Limpar histórico de chat

    Limpa o histórico de chat.

    • Substitua os seguintes parâmetros principais no código de exemplo:

      Parâmetro

      Descrição

      hosts

      O endpoint do serviço obtido na Etapa 1.

      authorization

      O token do serviço obtido na Etapa 1.

    • Nenhum parâmetro de entrada é necessário.

    • Retorna a string success após a conclusão.

    O código de exemplo a seguir mostra como chamar a API em Python:

    import requests
    import json
    def post_clear_history(url='http://127.0.0.1:7860', headers=None):
        r = requests.post(f'{url}/clear_history', headers=headers, timeout=1500)
        data = r.content.decode('utf-8')
        return data
    if __name__ == '__main__':
        # Replace <service_url> with the service endpoint.
        hosts = '<service_url>'
        # Replace <token> with the service token.
        head = {
            'Authorization': '<token>'
        }
        clear_info = post_clear_history(url=hosts, headers=head)
        print(clear_info)