← Blog
December 17, 2024

Um guia passo a passo sobre como implantar o Llama 3.1 8B na computação com a Hivenet

Um guia de configuração rápido e prático para implantar o Llama 3.1 8B no Hivenet Compute. Se você precisa de inferência de alto desempenho ou extensão de contexto estendida, este guia explica como instalar dependências, servir o modelo e expor endpoints compatíveis com OpenAI.

🚀 Comece agora e desbloqueie todo o potencial do Llama 3.1 no Hivenet Compute!

Requisitos

  • 1 Computação G-Small instância com Ubuntu v24.04 LTS modelo
  • Token Hugging Face com acesso a Lhama 3.1

Dependências

Certifique-se de que as seguintes dependências estejam instaladas:

  • pip
  • miniconda
  • vllm

Instalando dependências

Para evitar a perda dos pacotes instalados, todas as dependências devem ser instaladas dentro do /home/ubuntu/espaço de trabalho diretório.

Conecte-se à sua instância de computação

Primeiro, estabeleça uma conexão SSH com sua instância de computação:

ssh -i ~/.ssh/id_rsa -o “proxyCommand=ssh bastion@ssh.hivecompute.ai %h” ubuntu@d348351b-a04c-4b98-9d1a-2e474623395b.ssh.hivecompute.ai

Instalar miniconda

wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O install_miniconda.sh
bash install_miniconda.sh -b -p /home/ubuntu/workspace/opt/conda
caminho de exportação =/home/ubuntu/workspace/opt/conda/bin: $PATH
conda init

Desconecte e reconecte (CTRL+D) para que as alterações entrem em vigor.

Instalar vllm

pip install vllm

Servindo Llama 3.1 8B

Os modelos Llama 3.1 têm um comprimento máximo de contexto de 128 mil tokens. Em um RTX 4090 (24 GB DE MEMÓRIA RAM):

  • 16GB é usado para parâmetros do modelo (precisão BF16)
  • 8GB está disponível para o cache KV
  • Isso permite até 59 mil tokens no comprimento do contexto
  • Para comprimentos de contexto maiores, use Quantização FP8 ou um instância de computação maior

Funcionando com precisão total (59K Tokens)

export HF_TOKEN= <YOUR_HUGGING_FACE_TOKEN>nohup vllm server meta-lama/llama-3.1-8b-instruct --download-dir /home/ubuntu/workspace --gpu-memory-utilization 1 --max-model-len 59000 &

Monitore os registros para confirmar que os endpoints estão disponíveis:

cauda -f nohup.out

Procure uma saída semelhante a:
INFO 12-06 11:19:23 launcher.py:19] As rotas disponíveis são:
INFORMAÇÕES 12-06 11:19:23 launcher.py:27] Rota: /openapi.json, Métodos: GET, HEAD
INFO 12-06 11:19:23 launcher.py:27] Rota: /docs, Métodos: GET, HEAD
INFO 12-06 11:19:23 launcher.py:27] Rota: /docs/oauth2-redirect, Métodos: GET, HEAD
INFO 12-06 11:19:23 launcher.py:27] Rota: /redoc, Métodos: GET, HEAD
INFO 12-06 11:19:23 launcher.py:27] Rota: /health, Métodos: GET
INFO 12-06 11:19:23 launcher.py:27] Rota: /tokenize, Métodos: POST
INFO 12-06 11:19:23 launcher.py:27] Rota: /detokenize, Métodos: POST
INFO 12-06 11:19:23 launcher.py:27] Rota: /v1/models, Métodos: GET
INFO 12-06 11:19:23 launcher.py:27] Rota: /version, Métodos: GET
INFORMAÇÕES 12-06 11:19:23 launcher.py:27] Rota: /v1/chat/completions, Métodos: POST
INFORMAÇÕES 12-06 11:19:23 launcher.py:27] Rota: /v1/completions, Métodos: POST
INFO 12-06 11:19:23 launcher.py:27] Rota: /v1/embeddings, Métodos: POST
INFORMAÇÃO: Processo de servidor iniciado [93203]
INFORMAÇÃO: Aguardando a inicialização do aplicativo.
INFORMAÇÃO: Inicialização do aplicativo concluída.
INFORMAÇÃO: Uvicorn em execução no soquete ('0.0.0.0', 8000) (pressione CTRL+C para sair)

  1. Teste o modelo localmente

curl -X POST "http://localhost:8000/v1/chat/completions" -H “Tipo de conteúdo: application/json” --data '{"model”: “meta-llama/llama-3.1-8b-instruct”, "messages”: [{"role”: “user”, “content”: “o que é IA?"}] , “max_tokens”: 50} '

{"id” :"chat-c31b1784c32646d2ba146e72352b6fae”, "object” :"chat.completion”, "created” :1733491175, "model” :"meta-llama/llama-3.1-8b-instruct”, "escolhas”: [{"index” :0, "mensagem”: {"role” :"assistant”, "content” :"Inteligência Artificial (IA) se refere à simulação da inteligência humana em máquinas programadas para pensar e aprender como humanos. O termo também pode ser aplicado a qualquer máquina que exiba características associadas à mente humana, como aprendizado e resolução de problemas. \n\nAI”, “tool_calls”: []}, “logprobs” :null, “finish_reason” :"length”, “stop_reason” :null}], "usage”: {"prompt_tokens” :39, “total_tokens” :89, “completion_tokens” :50}, “prompt_logprobs” :null}

Executando com precisão FP8 (128K Tokens)

Para usar o tamanho total do contexto de 128K, execute:

exportar HF_TOKEN= <YOUR_HUGGING_FACE_TOKEN>
nohup vllm serve meta-lama/llama-3.1-8b-instruct --download-dir /home/ubuntu/workspace --gpu-memory-utilization 1 --max-model-len 128000 --dtype half --quantization fp8 --kv-cache-dtype fp8 &

Monitore os registros e espere até que os endpoints openai sejam expostos:

cauda -f nohup.out
INFO 12-06 11:19:23 launcher.py:19] As rotas disponíveis são:
INFORMAÇÕES 12-06 11:19:23 launcher.py:27] Rota: /openapi.json, Métodos: GET, HEAD
INFO 12-06 11:19:23 launcher.py:27] Rota: /docs, Métodos: GET, HEAD
INFO 12-06 11:19:23 launcher.py:27] Rota: /docs/oauth2-redirect, Métodos: GET, HEAD
INFO 12-06 11:19:23 launcher.py:27] Rota: /redoc, Métodos: GET, HEAD
INFO 12-06 11:19:23 launcher.py:27] Rota: /health, Métodos: GET
INFO 12-06 11:19:23 launcher.py:27] Rota: /tokenize, Métodos: POST
INFO 12-06 11:19:23 launcher.py:27] Rota: /detokenize, Métodos: POST
INFO 12-06 11:19:23 launcher.py:27] Rota: /v1/models, Métodos: GET
INFO 12-06 11:19:23 launcher.py:27] Rota: /version, Métodos: GET
INFORMAÇÕES 12-06 11:19:23 launcher.py:27] Rota: /v1/chat/completions, Métodos: POST
INFORMAÇÕES 12-06 11:19:23 launcher.py:27] Rota: /v1/completions, Métodos: POST
INFO 12-06 11:19:23 launcher.py:27] Rota: /v1/embeddings, Métodos: POST
INFORMAÇÃO: Processo de servidor iniciado [93203]
INFORMAÇÃO: Aguardando a inicialização do aplicativo.
INFORMAÇÃO: Inicialização do aplicativo concluída.
INFORMAÇÃO: Uvicorn em execução no soquete ('0.0.0.0', 8000) (pressione CTRL+C para sair)

Testando o modelo localmente

Envie uma solicitação de teste:

curl -X POST "http://localhost:8000/v1/chat/completions" -H “Tipo de conteúdo: application/json” --data '{"model”: “meta-llama/llama-3.1-8b-instruct”, "messages”: [{"role”: “user”, “content”: “o que é IA?"}] , “max_tokens”: 50} '

Resposta esperada:

{"id” :"chat-67dfc8a8c6904642a27fe8c889a6455d”, "object” :"chat.completion”, "created” :1733491601, "model” :"meta-llama/llama-3.1-8b-instruct”, "escolhas”: [{"index” :0, "mensagem”: {"role” :"assistant”, "content” :"Inteligência Artificial (IA) é um amplo campo da ciência da computação que se concentra na criação de máquinas inteligentes que podem realizar tarefas que normalmente requerem inteligência humana. A IA envolve o desenvolvimento de algoritmos, modelos estatísticos e técnicas de aprendizado de máquina para permitir que os computadores pensem, aprendam”, "tool_calls”: []}, "logprobs” :null, "finish_reason” :"length”, "stop_reason” :null}], "usage”: {"prompt_tokens” :39, “total_tokens” :89, “completion_tokens” :50}, “prompt_logprobs” :null}

Expondo endpoints compatíveis com OpenAI

Para permitir acesso externo, você tem duas opções:

  1. FRP (se você tiver um servidor/VM acessível ao público)
  2. Ngrok (se você não tiver uma instância pública)

Usando o Ngrok para acesso externo

  • Crie uma conta em ngrok
  • Faça o login e pegue seu token de autenticação
  • Baixe e instale o Ngrok

wget https://bin.equinox.io/c/bNyj1mQVY4c/ngrok-v3-stable-linux-amd64.tgz
sudo tar -xvzf ngrok-v3-stable-linux-amd64.tgz -C /usr/local/bin

  • Adicione seu token


ngrok config add-authtoken <YOUR_NGROCK_TOKEN>

  • Reivindique um domínio estático da sua conta ngrok
  • Inicie o Ngrok

<YOUR_NGROK_STATIC_DOMAIN>nohup ngrok http --url = 800 &

Testando o acesso externo

<YOUR_NGROK_STATIC_DOMAIN>curl https:///v1/models
{"object” :"list”, "data”: [{"id” :"meta-llama/llama-3.1-8b-instruct”, "object” :"model”, "created” :1733495850, "owned_by” :"vllm”, "root” :"meta-Llama/llama-3.1-8b-instruct”, "parent” :nnull, “max_model_len” :128000, "permission”: [{"id” :"modelperm-ecfa0d0e5dd04d4c973e9fc134d00d98", "object” :"model_permission”, "created” :1733495850, "allow_create_engine” :false, “allow_sampling” :true, “allow_sampling” :true, “allow_engine” :false _logprobs” :true, “allow_search_indices” :false, “allow_view” :true, “allow_fine_tuning” :false, “organization” :"*”, "group” :null, “is_blocking” :false}]}]}

curl -X POST “https://<YOUR_NGROK_STATIC_DOMAIN>/v1/chat/completions” -H “Tipo de conteúdo: application/json” --data '{"model”: “meta-llama/llama-3.1-8b-instruct”, "messages”: [{"role”: “user”, “content”: “o que é IA?"}] , “max_tokens”: 50} '
{"id” :"chat-8f35de4b78ca4710b7d6badd26fc6439", "object” :"chat.completion”, "created” :1733495952, "model” :"meta-llama/llama-3.1-8b-instruct”, "choices”: [{"index” :0, "message”: {"role” :"assistant”, "content” :"AI, ou Inteligência Artificial, refere-se à simulação da inteligência humana em máquinas programadas para pensar e aprender como humanos. O termo pode se referir a qualquer máquina que exiba características associadas à mente humana, como aprendizado, resolução de problemas, tomada de decisões,”, "tool_calls”: []}, "logprobs” :null, "finish_reason” :"length”, "stop_reason” :null}], "usage”: {"prompt_tokens” :39, "total_tokens” :89, "completion_tokens” tokens” :50}, “prompt_logprobs” :null}

É isso aí! Agora você tem o Llama 3.1 8B em execução no Compute com endpoints compatíveis com OpenAI. Se você precisar de mais comprimento de contexto, ajuste as configurações de precisão ou atualize sua instância.

🚀 Precisa de ajuda ou quer explorar mais? Inicie uma instância hoje e leve sua implantação de IA para o próximo nível!