Pular para o conteúdo principal

Como implementar o Llama 3.3 70B na nuvem: Um guia prático

Implemente a versão AWQ do Llama 3.3 70B usando o vLLM, o BentoML e o BentoCloud para criar um sistema altamente eficiente, de baixa latência e com taxa de transferência excepcional.
Actualizado 7 de fev. de 2025  · 18 min de leitura

A implementação de modelos de linguagem grandes (LLMs) está se tornando cada vez mais desafiadora, pois esses modelos exigem máquinas de GPU de ponta com VRAM significativa. Os engenheiros também precisam dominar as ferramentas de MLOps para lidar com tarefas como servir, implantar, testar e monitorar os modelos. Além disso, eles precisam implementar restrições de acesso e manter a segurança para se proteger contra ameaças cibernéticas e ataques de injeção imediata. A vida de um engenheiro de LLMOps pode ser difícil - mas não se preocupe, nós ajudamos você!

Neste tutorial, exploraremos uma solução mais simples e eficiente para a implementação de LLMs, como o Llama 3.3 70B, na nuvem. Com apenas algumas linhas de código Python e alguns comandos de terminal, seu modelo estará pronto e funcionando. O BentoCloud simplifica e gerencia tudo, tornando o processo de implantação simples e seguro.

Guia simples de implementação da imagem do recurso Llama 3.3 70B na nuvem.

Se você for iniciante, recomendo que façao curso Introduction to LLMs in Python para entender os fundamentos dos modelos de linguagem grandes.

Introducing Llama 3.3

O novo Meta Llama 3.3 é um modelo multilíngue de linguagem grande (LLM) somente de texto (70B) ajustado por instruções que oferece desempenho aprimorado em comparação com o Llama 3.1 (70B) e o Llama 3.2 (90B). Em alguns casos, ele superou até mesmo o Llama 3.1 (405B), que é maior. Esse modelo é somente de texto e otimizado para casos de uso de diálogo multilíngue.

O Llama 3.3 é um modelo de linguagem auto-regressivo criado em uma arquitetura de transformador otimizada. Ele foi ajustado usando o ajuste fino supervisionado (SFT) e o aprendizado por reforço com feedback humano (RLHF) para se alinhar melhor com as preferências humanas de ajuda e segurança.

Saiba mais sobre o Llama 3.3 lendo o site O que é o Llama 3.3 70B da Meta? Como funciona, casos de uso e muito mais blog post.

Você quer começar a usar a IA generativa?

Saiba como trabalhar com LLMs em Python diretamente em seu navegador

Comece agora

Entendendo as principais ferramentas e serviços do projeto

Neste projeto, usaremos o BentoML para criar o serviço de IA, o vLLM para servir modelos de alto rendimento e o BentoCloud para infraestrutura e implementação robustas. Além disso, implantaremos a versão AWQ do modelo para otimizar o desempenho. 

Resumindo, o vLLM combinado com o AWQ cria uma combinação mortal para a criação de aplicativos LLM que são super rápidos e capazes de lidar com várias solicitações simultaneamente.

AWQ

AWQ (Activation-aware Weight Quantization) é uma técnica inovadora de quantização projetada para aprimorar a implantação de modelos de linguagem grandes. Você consegue isso reduzindo significativamente o uso da memória e melhorando a velocidade de inferência, tudo isso mantendo a alta precisão.

Leia o artigo de pesquisa para saber mais sobre a tecnologia AWQ e como ela otimiza a inferência de modelos, mantendo a precisão.

vLLM

O vLLM (Virtual Large Language Model) é uma biblioteca de código aberto projetada especificamente para otimizar a inferência e a veiculação de modelos de linguagem grandes. Ele aborda desafios críticos, como rendimento e eficiência de memória, introduzindo técnicas avançadas como o PagedAttention, que garante o gerenciamento eficiente da memória de valor-chave de atenção. 

Saiba mais sobre o pacote Python vLLM seguindo o endereço vLLM: Configuração do vLLM localmente e no Google Cloud para CPU tutorial.

BentoML

O BentoML é uma estrutura de serviço de modelo de aprendizado de máquina de código aberto que funciona como a espinha dorsal do pipeline de implementação do LLM. Ele simplifica o processo de empacotamento, implantação e gerenciamento de modelos de aprendizado de máquina, incluindo LLMs, na produção.

Siga o tutorial Como implantar LLMs com o BentoML para saber mais sobre o ecossistema do BentoML e como implantar modelos LLM menores.

BentoCloud

O BentoCloud é uma plataforma sem servidor construída sobre o BentoML, projetada para simplificar a implantação e o gerenciamento de modelos de aprendizado de máquina. Ele oferece uma infraestrutura robusta otimizada para inferência de IA, o que o torna particularmente adequado para atender a LLMs. 

Com o BentoCloud, os usuários podem implementar soluções de IA escaláveis e eficientes em ambientes de nuvem sem se preocupar com o gerenciamento da infraestrutura.

Desenvolvendo o aplicativo Llama 3.3 70B

Agora, vamos dar continuidade ao projeto. Criaremos os seguintes componentes:

  1. Um arquivo app.py para definir o modelo que serve a API com vLLM e FastAPI.
  2. Um arquivo requirements.txt para especificar os pacotes Python necessários para a instalação no ambiente de nuvem.
  3. Um arquivo bentofile.yaml para configurar a infraestrutura, criar imagens do Docker e configurar o ambiente de implantação.

Começaremos instalando o pacote BentoML Python usando o comando pip:

pip install bentoml

No arquivo do aplicativo Python, configuraremos o endpoint do modelo fazendo o seguinte:

  1. Importe as bibliotecas Python, como bentoml, fastapi e vllm.
  2. Crie um aplicativo FastAPI para atender a pontos de extremidade compatíveis com OpenAI.
  3. Defina os parâmetros do modelo, o prompt do sistema e a ID do modelo.
  4. Especifique rotas para conclusões de bate-papo, conclusões e listagem de modelos.
  5. Configure um serviço BentoML com recursos de GPU (NVIDIA A100) e monte o aplicativo FastAPI.
  6. Configure o mecanismo VLLM e o tokenizador para inferência de modelo.
  7. Implemente um método assíncrono e de fluxo contínuo para respostas de fluxo contínuo.

Adicione o código abaixo em seu site app.py:

# Standard library imports
import uuid
from argparse import Namespace
from typing import AsyncGenerator, Optional

# Third-party imports
import bentoml
import fastapi
from annotated_types import Ge, Le
from typing_extensions import Annotated

# Initialize FastAPI application
openai_api_app = fastapi.FastAPI()

# Constants
MAX_MODEL_LEN = 8192
MAX_TOKENS = 1024

SYSTEM_PROMPT = """You are a helpful and respectful assistant. Provide safe, unbiased, and accurate answers.
                If a question is unclear or you don't know the answer, explain why instead of guessing."""

MODEL_ID = "casperhansen/llama-3.3-70b-instruct-awq"

# Define OpenAI-compatible API endpoints
OPENAI_ENDPOINTS = [
    ["/chat/completions", "create_chat_completion", ["POST"]],
    ["/completions", "create_completion", ["POST"]],
    ["/models", "show_available_models", ["GET"]],
]


@bentoml.mount_asgi_app(openai_api_app, path="/v1")
@bentoml.service(
    name="llama3.3-70b-instruct-awq",
    traffic={
        "timeout": 1200,
        "concurrency": 256,
    },
    resources={
        "gpu": 1,
        "gpu_type": "nvidia-a100-80gb",
    },
)


class BentoVLLM:
    def __init__(self) -> None:
        """Initialize the BentoVLLM service with VLLM engine and tokenizer."""
        import vllm.entrypoints.openai.api_server as vllm_api_server
        from transformers import AutoTokenizer
        from vllm import AsyncEngineArgs, AsyncLLMEngine

        # Configure VLLM engine arguments
        ENGINE_ARGS = AsyncEngineArgs(
            model=MODEL_ID,
            max_model_len=MAX_MODEL_LEN,
            enable_prefix_caching=True,
        )

        # Initialize engine and tokenizer
        self.engine = AsyncLLMEngine.from_engine_args(ENGINE_ARGS)
        self.tokenizer = AutoTokenizer.from_pretrained(MODEL_ID)

        # Register API endpoints
        for route, endpoint_name, methods in OPENAI_ENDPOINTS:
            endpoint_func = getattr(vllm_api_server, endpoint_name)
            openai_api_app.add_api_route(
                path=route,
                endpoint=endpoint_func,
                methods=methods,
            )

        # Configure model arguments
        model_config = self.engine.engine.get_model_config()
        args = Namespace(
            model=MODEL_ID,
            disable_log_requests=True,
            max_log_len=1000,
            response_role="assistant",
            served_model_name=None,
            chat_template=None,
            lora_modules=None,
            prompt_adapters=None,
            request_logger=None,
            disable_log_stats=True,
            return_tokens_as_token_ids=False,
            enable_tool_call_parser=True,
            enable_auto_tool_choice=True,
            tool_call_parser="llama3_json",
            enable_prompt_tokens_details=False,
        )

        # Initialize application state
        vllm_api_server.init_app_state(
            self.engine, model_config, openai_api_app.state, args
        )

    @bentoml.api
    async def generate(
        self,
        prompt: str = "Describe the process of photosynthesis in simple terms",
        system_prompt: Optional[str] = SYSTEM_PROMPT,
        max_tokens: Annotated[int, Ge(128), Le(MAX_TOKENS)] = MAX_TOKENS,
    ) -> AsyncGenerator[str, None]:
        """
        Generate text based on the input prompt using the VLLM engine.

        Args:
            prompt: The user's input prompt
            system_prompt: Optional system prompt to guide the model's behavior
            max_tokens: Maximum number of tokens to generate

        Returns:
            AsyncGenerator yielding generated text chunks
        """
        from vllm import SamplingParams

        # Configure sampling parameters
        SAMPLING_PARAM = SamplingParams(
            max_tokens=max_tokens,
            skip_special_tokens=True,
        )

        # Use default system prompt if none provided
        if system_prompt is None:
            system_prompt = SYSTEM_PROMPT

        # Prepare messages for chat
        messages = [
            {"role": "system", "content": system_prompt},
            {"role": "user", "content": prompt},
        ]

        # Apply chat template
        prompt = self.tokenizer.apply_chat_template(
            messages,
            tokenize=False,
            add_generation_prompt=True,
        )

        # Generate response stream
        stream = await self.engine.add_request(uuid.uuid4().hex, prompt, SAMPLING_PARAM)

        # Stream the generated text
        cursor = 0
        async for request_output in stream:
            text = request_output.outputs[0].text
            yield text[cursor:]
            cursor = len(text)

Crie um arquivo requirements.txt e inclua todos os pacotes Python necessários para criar o aplicativo de IA. Especifique as versões exatas de cada pacote para manter a estabilidade e a reprodutibilidade do projeto.

Veja como deve ser o site requirements.txt:

accelerate==1.2.0
autoawq==0.2.7.post3
bentoml>=1.3.15
fastapi==0.115.6
openai==1.57.0
vllm==0.6.4.post1; sys_platform == "linux"

O arquivo bentofile.yaml é o arquivo de configuração usado para definir e criar o serviço BentoML. Ele inclui os seguintes componentes:

  • Definição do serviço: Especifica o nome do serviço, vinculando o arquivo do aplicativo Python (app.py) e o nome da classe do serviço (BentoVLLM).
  • Etiquetas: Adiciona metadados como o proprietário, a equipe e o estágio para ajudar a organizar e gerenciar o serviço.
  • Arquivos: Garante que os arquivos Python necessários sejam incluídos no processo de compilação.
  • Dependências: Instala os pacotes Python necessários usando o arquivo requirements.txt.
  • Versão Python: Configura o contêiner do Docker para usar o Python 3.11 para compatibilidade e estabilidade.

Adicione o seguinte conteúdo ao seu arquivo bentofile.yaml:

service: 'app:BentoVLLM'
labels:
  owner: Abid
  team: DataCamp
  stage: dev
include:
  - '*.py'
python:
  requirements_txt: './requirements.txt'
  lock_packages: false
docker:
  python_version: "3.11"

Implementação do aplicativo Llama 3.3 70B

Agora vem a parte mágica: O BentoCloud fará tudo por nós, e você só precisa digitar um comando. Mas antes disso, temos que fazer o login no BentoCloud digitando o seguinte comando no terminal.

bentoml cloud login

BentoML CLI for Cloud Login.

A ferramenta CLI fará algumas perguntas e, em seguida, redirecionará você para o site do BentoCloud para criar uma conta e gerar a chave da API. 

Depois que você fizer isso, ele aplicará automaticamente a chave de API às suas ferramentas de CLI.

Criando o token da chave da API.

Observação: A implementação da versão completa do modelo 70B requer 80 GB de memória da GPU. Embora o BentoCloud forneça 10 dólares em créditos gratuitos, você precisará assinar o plano pro para acessar as GPUs A100 com 80 GB de VRAM.

Para assinar, acesse a guia "Billing" (Cobrança) clicando na foto do seu perfil no canto superior direito e adicionando os detalhes do seu cartão de crédito.

Não se preocupe; se você for cuidadoso com as implementações, isso não custará mais do que US$ 6. Mas certifique-se de encerrar a implantação quando você terminar de fazer experiências!

Ciclo de faturamento atual na BentoCloud

Agora vem a melhor parte: implantaremos o aplicativo BentoML na nuvem usando o seguinte comando e habilitaremos a autorização de acesso. Isso significa que apenas usuários com a chave BentoML API podem acessar esse servidor API.

bentoml deploy . --access-authorization true

Você levará alguns segundos para que todos os arquivos, configurações e outros componentes necessários sejam enviados e, em seguida, o BentoCloud cuidará do resto.

Implementação do LLM no BentoCloud usando a CLI.

Para visualizar as implantações atuais em execução, acesse o painel do BentoCloud e clique na guia "Deployments". Por exemplo, a imagem abaixo mostra o aplicativo no processo "Image Building":

BentoCloud Dashboards "Deployments" (Implantações)

Acessando o modelo implantado

Depois de mais alguns minutos criando a imagem, configurando a infraestrutura e implantando o modelo, nosso aplicativo está pronto para ser usado!

1. Playground

O BentoCloud oferece uma interface de usuário Playground para você testar seu modelo no painel, semelhante à plataforma OpenAI. Como nosso serviço é restrito, precisaremos fornecer uma chave de API para acessar o modelo no Playground, conforme mostrado abaixo:

BentoCloud Dashboards "Deployments" > "Playground", configurando a chave API.

Depois disso, escreveremos o prompt e clicaremos no botão "Submit" (Enviar). 

A geração de respostas foi rápida e precisa:

BentoCloud Dashboards "Deployments" > "Playground" testando o serviço LLM.

2. Comando CURL

Usaremos um comando CURL no terminal para acessar o serviço LLM localmente. Mas, antes disso, precisamos gerar uma nova chave de API para usar esse serviço em qualquer sistema:

BentoCloud Dashboards gerando a chave API.

Além disso, precisaremos do URL do endpoint que podemos copiar da guia "Deployments" (Implantações):

BentoCloud Dashboards "Deployments" para que você copie a URL do Endpoint.

Depois de obter a chave da API e o URL do ponto de extremidade, você pode gerar uma resposta usando o seguinte comando CURL. 

O comando inclui o URL do ponto de extremidade, a chave da API, o argumento max_tokens e o argumento prompt:

curl -s -X POST \
    'https://llama-3-3-70-b-instruct-awq-zkd2-39800880.mt-guc1.bentoml.ai/generate' \
    -H "Authorization: Bearer $(echo $BENTO_CLOUD_API_KEY)" \
    -H 'Content-Type: application/json' \
    -d '{
        "max_tokens": 1024,
        "prompt": "Describe the process of photosynthesis in simple terms"
    }'

A resposta é precisa, e você precisou de alguns envios para gerá-la. 

Inferência de modelo usando o comando CURL.

3. Cliente OpenAI Python 

O endpoint do BentoML é compatível com o cliente OpenAI Python. Você não precisa modificar significativamente seu código para integrar esse modelo de código aberto ao seu aplicativo. 

Tudo o que você precisa fazer é alterar o URL de base, fornecer a chave da API e especificar o nome do modelo:

import os

from openai import OpenAI

BENTOML_API_KEY = os.getenv("BENTO_CLOUD_API_KEY")  #
if BENTOML_API_KEY is None:
    raise ValueError("BENTOML_API_KEY environment variable is not set.")


client = OpenAI(
    base_url="https://llama-3-3-70-b-instruct-awq-zkd2-39800880.mt-guc1.bentoml.ai/v1",
    api_key=BENTOML_API_KEY,
)

chat_completion = client.chat.completions.create(
    model="casperhansen/llama-3.3-70b-instruct-awq",
    messages=[
        {"role": "user", "content": "What is a black hole and how does it work?"}
    ],
    stream=True,
    stop=["<|eot_id|>", "<|end_of_text|>"],
)
for chunk in chat_completion:
    print(chunk.choices[0].delta.content or "", end="")

Inferência de modelo usando o cliente OpenAI Python.

Consulte o repositório kingabzpro/Deploying-Llama-3.3-70B do GitHub, que contém o arquivo do aplicativo, as configurações e os códigos de inferência.

Monitoramento do serviço Llama 3.3

No BentCloud, você pode monitorar o desempenho do modelo, a latência, o uso do hardware, a taxa de transferência do modelo e outras métricas críticas sem configurar ferramentas de registro ou monitoramento.

Vá para suas implantações e clique na guia "Monitoring" (Monitoramento).

Monitoramento de modelos no BentoCloud.

Role para baixo para ver as métricas relacionadas a serviços, recursos e LLM em gráficos intuitivos e diretos.

Monitoramento de modelos no BentoCloud.

Conclusão

A criação e a implementação de um endpoint LLM tornaram-se extremamente simples com o ecossistema BentoML. 

Ao escrever apenas algumas linhas de código para criar sua API, configurar um "bentofile" e implantar o modelo, você pode ter seu modelo em funcionamento em minutos. Depois de implantado, o endpoint pode ser acessado por meio de comandos CURL, da biblioteca de solicitações Python, do cliente BentoML ou do cliente OpenAI.

O resultado é um sistema altamente eficiente, de baixa latência e com alta taxa de transferência, capaz de lidar com várias solicitações simultaneamente. O BentoCloud também oferece escalonamento automático com base em sua configuração, garantindo que o sistema possa lidar com altos volumes de tráfego, aumentando ou diminuindo conforme necessário.

Para obter um guia mais detalhado sobre a implementação de LLMs com o BentoML, recomendo que você siga o site How to Deploy LLMs with BentoML: Um guia passo a passo.

Desenvolver aplicativos de IA

Aprenda a criar aplicativos de IA usando a API OpenAI.

Abid Ali Awan's photo
Author
Abid Ali Awan
LinkedIn
Twitter

Sou um cientista de dados certificado que gosta de criar aplicativos de aprendizado de máquina e escrever blogs sobre ciência de dados. No momento, estou me concentrando na criação e edição de conteúdo e no trabalho com modelos de linguagem de grande porte.

Temas

Saiba mais sobre IA e LLMs com estes cursos!

curso

MLOps Concepts

2 hr
23.1K
Discover how MLOps can take machine learning models from local notebooks to functioning models in production that generate real business value.
Ver DetalhesRight Arrow
Iniciar curso
Ver maisRight Arrow
Relacionado

blog

Os prós e contras de usar LLMs na nuvem versus executar LLMs localmente

Principais considerações para selecionar a estratégia de implementação ideal para LLMs.
Abid Ali Awan's photo

Abid Ali Awan

8 min

tutorial

RAG With Llama 3.1 8B, Ollama e Langchain: Tutorial

Aprenda a criar um aplicativo RAG com o Llama 3.1 8B usando Ollama e Langchain, configurando o ambiente, processando documentos, criando embeddings e integrando um retriever.
Ryan Ong's photo

Ryan Ong

12 min

tutorial

Llama.cpp Tutorial: Um guia completo para inferência e implementação eficientes de LLM

Este guia abrangente sobre o Llama.cpp guiará você pelos fundamentos da configuração do seu ambiente de desenvolvimento, compreendendo suas principais funcionalidades e aproveitando seus recursos para solucionar casos de uso no mundo real.
Zoumana Keita 's photo

Zoumana Keita

11 min

tutorial

Guia para iniciantes do LlaMA-Factory WebUI: Ajuste fino dos LLMs

Saiba como fazer o ajuste fino dos LLMs em conjuntos de dados personalizados, avaliar o desempenho e exportar e servir modelos com facilidade usando a estrutura com pouco ou nenhum código do LLaMA-Factory.
Abid Ali Awan's photo

Abid Ali Awan

12 min

tutorial

Ajuste fino do Llama 3.1 para classificação de textos

Comece a usar os novos modelos Llama e personalize o Llama-3.1-8B-It para prever vários distúrbios de saúde mental a partir do texto.
Abid Ali Awan's photo

Abid Ali Awan

13 min

tutorial

Guia de Introdução ao Ajuste Fino de LLMs

O ajuste fino dos grandes modelos de linguagem (LLMs, Large Language Models) revolucionou o processamento de linguagem natural (PLN), oferecendo recursos sem precedentes em tarefas como tradução de idiomas, análise de sentimentos e geração de textos. Essa abordagem transformadora aproveita modelos pré-treinados como o GPT-2, aprimorando seu desempenho em domínios específicos pelo processo de ajuste fino.
Josep Ferrer's photo

Josep Ferrer

12 min

Ver maisVer mais