Todos os produtos
Search
Central de documentação

Elastic GPU Service:Build a secure LLM inference environment on a heterogeneous confidential computing instance

Última atualização: Jul 04, 2026

Com a adoção crescente dos modelos de linguagem grandes (LLMs), as empresas precisam proteger os dados durante a inferência. Use uma instância de computação confidencial heterogênea do Alibaba Cloud e a solução Confidential AI (CAI) para construir um ambiente seguro de inferência de LLM.

Contexto

As instâncias de computação confidencial heterogênea gn8v-tee do Alibaba Cloud integram GPUs a um ambiente de execução confiável (TEE) baseado na extensão Trust Domain Extension (TDX) da CPU. Essa arquitetura protege os dados durante a transmissão entre CPU e GPU e também durante o processamento na GPU. Ao usar o Key Management Service (KMS) do Alibaba Cloud como backend de armazenamento de chaves e implantar o serviço de atestação remota Trustee em um cluster do Container Service for Kubernetes (ACK), seu serviço de inferência obtém proteção de computação confidencial sem necessidade de modificações no código.

Arquitetura da solução

A figura a seguir ilustra a arquitetura da solução.

image

Procedimento

Etapa 1: Prepare os dados criptografados do modelo

Esta etapa abrange o download, a criptografia e o upload do modelo. O processo pode levar algum tempo devido ao tamanho elevado do arquivo de modelo.

Nota

Para testar esta solução, use o arquivo de modelo criptografado que preparamos. Caso opte por usar nosso arquivo, pule esta etapa e vá diretamente para a Etapa 2: Configure o serviço de atestação remota Trustee. Clique em no link a seguir para obter as informações do arquivo de modelo criptografado.

Clique em aqui para visualizar as informações do arquivo de modelo criptografado

Nome do modelo

Método de criptografia

Senha de criptografia

Região do OSS com leitura pública

Endpoint do Object Storage Service (OSS)

Local de armazenamento do modelo

Qwen3-32B

Gocryptfs

0Bn4Q1wwY9fN3P

cn-beijing

oss-cn-beijing-internal.aliyuncs.com

conf-ai:/qwen3-32b-gocryptfs/

Sam

conf-ai:/qwen3-32b-sam/

Qwen2.5-3B-Instruct

Gocryptfs

0Bn4Q1wwY9fN3P

cn-beijing

oss-cn-beijing-internal.aliyuncs.com

conf-ai:/qwen2.5-3b-gocryptfs/

Sam

conf-ai:/qwen2.5-3b-sam/

1. Baixe um modelo

Um serviço de atestação remota controla o acesso à chave de descriptografia gerenciada pelo KMS. Criptografe seu modelo em um ambiente local ou confiável. Este exemplo usa o Qwen2.5-3B-Instruct.

Nota

Caso já possua um modelo, pule esta seção e prossiga para 2. Criptografe o modelo.

Use o ModelScope para baixar o modelo Qwen2.5-3B-Instruct. É necessário ter o Python 3.9 ou superior instalado.

pip3 install modelscope importlib-metadata
modelscope download --model Qwen/Qwen2.5-3B-Instruct

O modelo será baixado para o diretório ~/.cache/modelscope/hub/models/Qwen/Qwen2.5-3B-Instruct/.

2. Criptografe o modelo

Dois métodos de criptografia são suportados. Este tópico usa o Gocryptfs como exemplo.

  • Gocryptfs: Padrão de criptografia baseado em AES-256-GCM, compatível com o padrão open source Gocryptfs.

  • Sam: Formato de criptografia de modelos de IA confiáveis do Alibaba Cloud. Protege a confidencialidade do modelo e impede que o conteúdo da licença seja adulterado ou utilizado ilegalmente.

Use Gocryptfs to encrypt

  1. Instale o Gocryptfs v2.4.0 com os parâmetros de criptografia padrão. Apenas a versão v2.4.0 é suportada.

    Install via yum

    Se você usa Alinux 3 ou AnolisOS 23, instale o Gocryptfs a partir do repositório yum.

    Alinux 3
    sudo yum install gocryptfs -y
    AnolisOS 23
    sudo yum install anolis-epao-release -y
    sudo yum install gocryptfs -y

    Download binary

    # Download the pre-compiled Gocryptfs package
    wget https://github.jobcher.com/gh/https://github.com/rfjakob/gocryptfs/releases/download/v2.4.0/gocryptfs_v2.4.0_linux-static_amd64.tar.gz
    
    # Extract and install
    tar xf gocryptfs_v2.4.0_linux-static_amd64.tar.gz
    sudo install -m 0755 ./gocryptfs /usr/local/bin
  2. Crie um arquivo de chave do Gocryptfs. Você fará o upload dessa chave para o Trustee posteriormente.

    Este exemplo armazena a chave 0Bn4Q1wwY9fN3P em cachefs-password. Em ambientes de produção, use uma chave aleatória forte.

    cat << EOF > ~/cachefs-password
    0Bn4Q1wwY9fN3P
    EOF
  3. Use a chave criada para criptografar o modelo.

    1. Configure o caminho do modelo em texto simples.

      Nota

      Especifique o caminho do seu modelo em texto simples. Substitua o valor caso esteja usando um modelo diferente.

      PLAINTEXT_MODEL_PATH=~/.cache/modelscope/hub/models/Qwen/Qwen2.5-3B-Instruct/
    2. Criptografe o diretório do modelo usando o Gocryptfs.

      Após a criptografia, o modelo é armazenado como texto cifrado no diretório ./cipher.

      mkdir -p ~/mount
      cd ~/mount
      mkdir -p cipher plain
      
      # Install Gocryptfs runtime dependencies
      sudo yum install -y fuse
      
      # initialize gocryptfs
      cat ~/cachefs-password | gocryptfs -init cipher
      
      # mount to plain
      cat ~/cachefs-password | gocryptfs cipher plain
      
      # move AI model to ~/mount/plain
      cp -r ${PLAINTEXT_MODEL_PATH}/. ~/mount/plain

Use Sam to encrypt

  1. Baixe e extraia o pacote do módulo de criptografia Sam RAI_SAM_SDK_2.1.0-20240731.tgz.

    # Extract the Sam encryption module
    tar xvf RAI_SAM_SDK_2.1.0-20240731.tgz
  2. Criptografe o modelo.

    # Navigate to the encryption directory of the Sam encryption module
    cd RAI_SAM_SDK_2.1.0-20240731/tools
    
    # Encrypt the model
    ./do_content_packager.sh <model_directory> <plaintext_key> <key_ID>

    Parâmetros:

    • <model_directory>: Diretório do modelo a ser criptografado. Caminhos relativos ou absolutos são suportados, como ~/.cache/modelscope/hub/models/Qwen/Qwen2.5-3B-Instruct/.

    • <plaintext_key>: Chave de criptografia personalizada, de 4 a 128 bytes, como 0Bn4Q1wwY9fN3P. Faça o upload desta chave para o serviço de atestação remota Trustee posteriormente.

    • <key_ID>: Identificador de chave personalizado, de 8 a 48 bytes, por exemplo, LD_Demo_0001.

    Após a criptografia, o modelo criptografado estará no diretório <key_ID> dentro do caminho atual.image

3. Faça o upload do modelo

Prepare um bucket do OSS na mesma região da instância heterogênea. Carregue o modelo criptografado no Alibaba Cloud OSS para que ele possa ser baixado e implantado posteriormente.

Tomando o OSS como exemplo, crie um bucket e um diretório chamado qwen-encrypted, como oss://examplebucket/qwen-encrypted/. Para mais informações, consulte Início rápido para o console. Devido ao tamanho grande do arquivo de modelo, recomendamos o uso do ossbrowser para fazer o upload do modelo criptografado para este diretório.

Etapa 2: Configure o serviço de atestação remota Trustee

O serviço de atestação remota é um serviço gerenciado pelo usuário que verifica o ambiente de execução dos modelos e dos serviços de inferência. A chave de descriptografia do modelo só é liberada após o serviço confirmar que o ambiente de implantação é confiável.

Use o ACK Serverless do Alibaba Cloud para implantar o serviço de atestação remota e o KMS do Alibaba Cloud para proteger a chave de descriptografia do modelo.

Importante
  • O cluster ACK não precisa estar na mesma região de destino do serviço de implantação heterogênea.

  • A instância do KMS do Alibaba Cloud deve estar na mesma região do cluster ACK onde o serviço de atestação remota Trustee do Alibaba Cloud será implantado.

  • Antes de criar a instância do KMS e o cluster ACK, crie uma Virtual Private Cloud (VPC) e dois vSwitches. Para mais informações, consulte Criar e gerenciar uma VPC.

1. Crie uma instância do KMS do Alibaba Cloud como backend de armazenamento de chaves

  1. Acesse o console do KMS. No painel de navegação à esquerda, escolha Resource > Instances. Na aba Software Key Management, crie e ative uma instância. Ao ativar a instância, selecione a mesma Virtual Private Cloud (VPC) do cluster ACK. Para mais informações, consulte Comprar e ativar uma instância do KMS.

    A ativação leva cerca de 10 minutos.

  2. Após a ativação da instância, no painel de navegação à esquerda, escolha Resource > Keys. Na página Keys, crie uma chave mestra do cliente (CMK) para a instância. Para mais informações, consulte Etapa 1: Criar uma chave de software.

  3. No painel de navegação à esquerda, escolha Application Access > Multi-Cloud Access (formerly AAP). Na aba Application Access, crie um ponto de acesso de aplicativo para a instância. Em Scope, selecione a instância do KMS que você criou. Para mais detalhes de configuração, consulte Método 1: Criação rápida.

    Após a criação do ponto de acesso do aplicativo, seu navegador baixará automaticamente um arquivo *ClientKey**.zip. Este arquivo contém:

    • Credential (ClientKeyContent): O nome de arquivo padrão é clientKey_****.json.

    • Credential Password (ClientKeyPassword): O nome de arquivo padrão é clientKey_****_Password.txt.

  4. Acesse a página Resource > Instances e clique em no nome da instância do KMS. Na página Details, clique em em Instance CA Certificate ao lado de Download para exportar o arquivo de certificado de chave pública PrivateKmsCA_***.pem.

2. Crie um cluster de serviço ACK e instale o componente csi-provisioner

  1. Acesse a página Create cluster para criar um cluster ACK Serverless. Para mais informações, consulte Criar um cluster ACK Serverless. Parâmetros principais:

    1. Cluster configurations: Configure os seguintes parâmetros e clique em em Next: Component configurations.

      Parâmetro

      Descrição

      VPC

      Selecione Use Existing e marque a caixa de seleção Configure SNAT for VPC. Isso é necessário para baixar a imagem do Trustee.

      vSwitch

      Garanta que existam pelo menos dois vSwitches na VPC. Caso contrário, não será possível expor um ALB público.

    2. Component configurations: Configure os seguintes parâmetros e clique em em Next: Confirm configuration.

      Parâmetro

      Descrição

      Service Discovery

      Selecione CoreDNS.

      Ingress

      Selecione ALB Ingress. Para a origem da instância do gateway nativo da nuvem ALB, selecione New e escolha dois vSwitches.

    3. Confirm configuration: Confirme as informações de configuração e os termos de serviço e, em seguida, clique em em Create Kubernetes Cluster.

  2. Após a criação do cluster, instale o componente csi-provisioner (Managed). Para mais informações, consulte Gerenciar componentes.

3. Implante o serviço de atestação remota Trustee no cluster ACK

  1. Conecte-se ao cluster pela rede pública ou por uma rede interna. Para mais informações, consulte Conectar-se a um cluster.

  2. Carregue a credencial do KMS (clientKey_****.json), a senha (clientKey_****_Password.txt) e o certificado CA (PrivateKmsCA_***.pem) para o ambiente do cluster ACK Serverless. Em seguida, execute o comando a seguir para implantar o Trustee com o KMS como backend de chaves.

    # Install the plugin
    helm plugin install https://github.com/AliyunContainerService/helm-acr
    
    helm repo add trustee acr://trustee-chart.cn-hangzhou.cr.aliyuncs.com/trustee/trustee
    helm repo update
    
    export DEPLOY_RELEASE_NAME=trustee
    export DEPLOY_NAMESPACE=default
    export TRUSTEE_CHART_VERSION=1.7.6
    
    # Set the region of the ACK cluster, for example, cn-hangzhou
    export REGION_ID=cn-hangzhou
    
    # Information about the KMS instance that you exported
    # Replace with your KMS instance ID
    export KMS_INSTANCE_ID=kst-hzz66a0*******e16pckc
    # Replace with the path to your KMS instance application identity credential
    export KMS_CLIENT_KEY_FILE=/path/to/clientKey_KAAP.***.json
    # Replace with the path to your KMS instance credential password
    export KMS_PASSWORD_FILE=/path/to/clientKey_KAAP.***_Password.txt
    # Replace with the path to your KMS instance CA certificate
    export KMS_CERT_FILE=/path/to/PrivateKmsCA_kst-***.pem
    
    helm install ${DEPLOY_RELEASE_NAME} trustee/trustee \
      --version ${TRUSTEE_CHART_VERSION} \
      --set regionId=${REGION_ID} \
      --set kbs.aliyunKms.enabled=true \
      --set kbs.aliyunKms.kmsIntanceId=${KMS_INSTANCE_ID} \
      --set-file kbs.aliyunKms.clientKey=${KMS_CLIENT_KEY_FILE} \
      --set-file kbs.aliyunKms.password=${KMS_PASSWORD_FILE} \
      --set-file kbs.aliyunKms.certPem=${KMS_CERT_FILE} \
      --namespace ${DEPLOY_NAMESPACE}
    Nota

    O comando helm plugin install... pode ser lento. Se falhar, execute helm plugin uninstall cm-push e tente novamente.

    Exemplo de saída:

    NAME: trustee
    LAST DEPLOYED: Tue Feb 25 18:55:33 2025
    NAMESPACE: default
    STATUS: deployed
    REVISION: 1
    TEST SUITE: None
  3. Obtenha o endpoint do serviço Trustee.

    export TRUSTEE_URL=http://$(kubectl get AlbConfig alb-$DEPLOY_RELEASE_NAME -o jsonpath='{.status.loadBalancer.dnsname}')/api
    echo ${TRUSTEE_URL}

    Exemplo de saída: http://alb-ppams74szbwg2f****.cn-shanghai.alb.aliyuncsslb.com/api.

  4. Teste a conectividade do serviço Trustee.

    cat << EOF | curl -k -X POST ${TRUSTEE_URL}/kbs/v0/auth -H 'Content-Type: application/json' -d @-
    {
        "version":"0.4.0",
        "tee": "tdx",
        "extra-params": "foo"
    }
    EOF

    Uma conexão bem-sucedida retorna uma saída semelhante a:

    {"nonce":"PIDUjUxQdBMIXz***********IEysXFfUKgSwk=","extra-params":""}

4. Crie um segredo para armazenar a chave de descriptografia do modelo

A chave de descriptografia do modelo é armazenada no KMS e gerenciada pelo Trustee. A chave torna-se acessível somente após o serviço de atestação remota verificar o ambiente de destino.

Acesse o console do Key Management Service. No painel de navegação à esquerda, escolha Resource > Secrets. Na aba Generic Secrets, clique em em Create Generic Secret. Observe as seguintes configurações de chave:

  • Secret Name: Insira um nome personalizado para o segredo. Este nome serve como índice para a chave. Por exemplo, model-decryption-key.

  • Set Secret Value: Insira a chave utilizada para criptografar o modelo. Por exemplo, 0Bn4Q1wwY9fN3P. Use sua chave real.

  • Encryption CMK: Selecione a chave mestra criada na etapa anterior.

Etapa 3: Crie uma instância de computação confidencial heterogênea

A criação de uma instância de computação confidencial heterogênea é semelhante à criação de uma instância comum, mas com algumas opções de configuração específicas. As etapas a seguir usam uma imagem do Alibaba Cloud Marketplace com ambiente de computação confidencial e CAI pré-instalados. Para mais informações sobre o ambiente de computação confidencial heterogêneo, consulte Construir ambiente heterogêneo.

  1. Acesse a página de compra de instâncias.

  2. Selecione a aba Custom Launch.

  3. Escolha o método de faturamento, região, tipo de instância, imagem e outras configurações.

    A tabela a seguir descreve os itens de configuração.

    Item de configuração

    Descrição

    Família de Instâncias

    Selecione um dos dois tipos de instância a seguir da família gn8v-tee:

    • ecs.gn8v-tee.4xlarge

    • ecs.gn8v-tee.6xlarge

    Imagem

    Clique em na aba Marketplace Images, pesquise por Confidential AI e selecione a imagem Alibaba Cloud Linux 3.2104 LTS 64-bit Single-card Confidential AI.

    Nota

    Para mais informações sobre esta imagem, consulte Imagem Alibaba Cloud Linux 3.2104 LTS 64-bit Single-card Confidential AI. Você pode criar a instância de computação confidencial heterogênea diretamente na página do produto da imagem.

    Disco do Sistema

    Recomendamos uma capacidade de disco do sistema de pelo menos 1 TiB. Estime o tamanho específico com base no tamanho do arquivo de modelo que você precisa executar. Geralmente, sugerimos uma capacidade superior ao dobro do tamanho do modelo. Defina a capacidade conforme necessário.

  4. Antes de criar a instância, revise a configuração geral no lado direito da página. Configure opções como a duração de uso para garantir que atendam aos seus requisitos.

  5. Leia e marque a caixa de seleção para concordar com os Termos de Serviço do ECS e outros acordos de serviço. Se já tiver concordado anteriormente, não é necessário repetir esta etapa. Siga as instruções na página e clique em em Create Order.

    Aguarde a criação da instância. Acesse a página de lista de instâncias no console para verificar o status. Quando o status mudar para Running, a instância estará criada.

Etapa 4: Configure as permissões de acesso da instância heterogênea ao OSS e ao Trustee

1. Configure as permissões de acesso ao OSS

Durante a implantação, a instância acessa o bucket do OSS que armazena o texto cifrado do modelo e solicita ao Trustee a chave de descriptografia. Conceda à instância acesso a ambos os serviços.

  1. Faça login no console do OSS.

  2. Clique em em Buckets e, em seguida, clique em no nome do bucket desejado.

  3. No painel de navegação à esquerda, escolha Permission Control > Bucket Policy.

  4. Na aba Bucket Policy, clique em em Authorize. No painel exibido, conceda a permissão Bucket ao endereço IP público da instância de computação confidencial heterogênea.

  5. Clique em em OK.

2. Configure as permissões de acesso ao Trustee

  • Acesse o console do Application Load Balancer (ALB), selecione Access Control à esquerda. Em seguida, clique em em Create ACL e adicione os endereços IP ou blocos CIDR que precisam acessar o Trustee como entradas de IP. Para mais informações, consulte Controle de acesso.

    Adicione os seguintes endereços ou intervalos de endereços:

    • O endereço IP público da VPC vinculada durante a implantação do serviço heterogêneo.

    • O endereço IP de saída do cliente de inferência.

  • Execute o comando a seguir para obter o ID da instância ALB utilizada pela instância Trustee no cluster.

    kubectl get ing --namespace ${DEPLOY_NAMESPACE} kbs-ingress -o jsonpath='{.status.loadBalancer.ingress[0].hostname}' | cut -d'.' -f1 | sed 's/[^a-zA-Z0-9-]//g'

    A saída esperada é a seguinte:

    alb-llcdzbw0qivhk0****
  • No painel de navegação à esquerda do console do ALB, escolha ALB > Instances. Na região onde o cluster está localizado, pesquise a instância ALB obtida na etapa anterior e clique em no ID da instância para acessar a página de detalhes. Na parte inferior da página, na área Instance Information, clique em em Disable Configuration Read-only Mode.

  • Mude para a aba Listener, clique em em Enable na coluna Access Control da instância de listener desejada e configure a lista de permissões com o grupo de políticas de controle de acesso criado na etapa anterior.

Etapa 5: Implante o serviço de inferência de modelos de linguagem grandes vLLM na instância de computação confidencial heterogênea

Implante o serviço de inferência de modelos de linguagem grandes vLLM na instância de computação confidencial heterogênea usando docker ou docker compose.

1. Prepare o arquivo de configuração

  1. Conecte-se remotamente à instância heterogênea. Para mais informações, consulte Fazer login em uma instância Linux usando o Workbench.

  2. Execute o comando a seguir para abrir o arquivo de configuração ~/cai.env.

    vi ~/cai.env
  3. Pressione a tecla i para entrar no modo de inserção e cole as informações de configuração preparadas no arquivo.

    # Configurations for model decryption
    TRUSTEE_URL="http://alb-xxxxxxxxx.cn-beijing.alb.aliyuncsslb.com/xxxx/" # URL of the Trustee service
    MODEL_KEY_ID="kbs:///default/aliyun/model-decryption-key" # The resource ID of the model decryption key configured on Trustee. For example, the ID for the secret named model-decryption-key is kbs:///default/aliyun/model-decryption-key
    
    # Configurations for encrypted model distribution
    MODEL_OSS_BUCKET_PATH="<bucket-name>:<model-path>" # The path of the model ciphertext stored in Alibaba Cloud OSS. For example, conf-ai:/qwen3-32b-gocryptfs/
    MODEL_OSS_ENDPOINT="https://oss-cn-beijing-internal.aliyuncs.com" # The OSS URL where the model ciphertext is stored
    # MODEL_OSS_ACCESS_KEY_ID="" # The AccessKey ID used to access the OSS bucket.
    # MODEL_OSS_SECRET_ACCESS_KEY="" # The AccessKey secret used to access the OSS bucket.
    # MODEL_OSS_SESSION_TOKEN="" # The session token used to access the OSS bucket. This is required only when you use STS credentials to access OSS.
    MODEL_ENCRYPTION_METHOD="gocryptfs" # The encryption method used. Valid values: "gocryptfs" and "sam". Default value: "gocryptfs".
    MODEL_MOUNT_POINT=/tmp/model # The mount point for the decrypted model plaintext. The model inference service can load the model from this path.
    
    # Configurations for large model service communication encryption
    MODEL_SERVICE_PORT=8080 # The TCP port used by the service. Communication on this port is transparently encrypted.
    
    # Configurations for P2P model distribution acceleration. You can ignore this by default.
    TRUSTEE_POLICY="default"
    # MODEL_SHARING_PEER="172.30.24.146 172.30.24.144"
  4. Digite :wq e pressione Enter para salvar o arquivo e sair do editor.

2. Implante o serviço de inferência

Deploy the inference service using docker

  1. Use o arquivo de configuração para iniciar o serviço CAI

    Use o arquivo configurado na etapa anterior para iniciar o serviço CAI, responsável por descriptografar o modelo criptografado. Isso monta os dados do modelo em texto simples descriptografado no caminho /tmp/model, especificado por MODEL_MOUNT_POINT no ambiente host. Seu programa de serviço de inferência, como o vLLM, pode carregar o modelo a partir deste caminho.

    1. Execute o comando a seguir para iniciar o serviço CAI.

      cd ~
      docker compose -f /opt/alibaba/cai-docker/docker-compose.yml --env-file ./cai.env up -d --wait

      A saída de exemplo a seguir indica que o serviço CAI foi iniciado com sucesso.

      [+] Running 5/5
       ✔ Container cai-docker-oss-1                    Healthy                                                                                                                                                                     44.7s 
       ✔ Container cai-docker-attestation-agent-1      Healthy                                                                                                                                                                     44.7s 
       ✔ Container cai-docker-tng-1                    Healthy                                                                                                                                                                     44.7s 
       ✔ Container cai-docker-confidential-data-hub-1  Healthy                                                                                                                                                                     44.7s 
       ✔ Container cai-docker-cachefs-1                Healthy
    2. Visualize o arquivo do modelo descriptografado

      Para visualizar o arquivo do modelo descriptografado, execute o seguinte comando.

      ls -la -R /tmp/model

      A saída de exemplo a seguir indica que o arquivo do modelo foi descriptografado com sucesso.

      image

  2. Execute o comando a seguir para iniciar o serviço de inferência vLLM.

    docker run --rm \
        --net host \
        -v /tmp/model:/tmp/model \
        --gpus all \
        egs-registry.cn-hangzhou.cr.aliyuncs.com/egs/vllm:0.8.5-pytorch2.6-cu124-20250429 \
    python3 -m vllm.entrypoints.openai.api_server --model=/tmp/model --trust-remote-code --port 8080 --served-model-name Qwen3-32B

    A saída de exemplo a seguir indica que o serviço de inferência foi iniciado com sucesso.

    Loading safetensors checkpoint shards:   0% Completed | 0/2 [00:00<?, ?it/s]
    Loading safetensors checkpoint shards:  50% Completed | 1/2 [00:01<00:01,  1.07s/it]
    Loading safetensors checkpoint shards: 100% Completed | 2/2 [00:01<00:00,  1.21it/s]
    Loading safetensors checkpoint shards: 100% Completed | 2/2 [00:01<00:00,  1.16it/s]
    
    INFO 03-04 07:49:06 model_runner.py:732] Loading model weights took 5.7915 GB
    INFO 03-04 07:49:08 gpu_executor.py:102] # GPU blocks: 139032, # CPU blocks: 7281
    INFO 03-04 07:49:08 model_runner.py:1024] Capturing the model for CUDA graphs. This may lead to unexpected consequences if the model is not static. To run the model in eager mode, set 'enforce_eager=True' or use '--enforce-eager' in the CLI.
    INFO 03-04 07:49:08 model_runner.py:1028] CUDA graphs can take additional 1~3 GiB memory per GPU. If you are running out of memory, consider decreasing `gpu_memory_utilization` or enforcing eager mode. You can also reduce the `max_num_seqs` as needed to decrease memory usage.
    INFO 03-04 07:49:18 model_runner.py:1225] Graph capturing finished in 9 secs.
    WARNING 03-04 07:49:18 serving_embedding.py:171] embedding_mode is False. Embedding API will not work.
    INFO 03-04 07:49:18 launcher.py:14] Available routes are:
    INFO 03-04 07:49:18 launcher.py:22] Route: /openapi.json, Methods: HEAD, GET
    INFO 03-04 07:49:18 launcher.py:22] Route: /docs, Methods: HEAD, GET
    INFO 03-04 07:49:18 launcher.py:22] Route: /docs/oauth2-redirect, Methods: HEAD, GET
    INFO 03-04 07:49:18 launcher.py:22] Route: /redoc, Methods: HEAD, GET
    INFO 03-04 07:49:18 launcher.py:22] Route: /health, Methods: GET
    INFO 03-04 07:49:18 launcher.py:22] Route: /tokenize, Methods: POST
    INFO 03-04 07:49:18 launcher.py:22] Route: /detokenize, Methods: POST
    INFO 03-04 07:49:18 launcher.py:22] Route: /v1/models, Methods: GET
    INFO 03-04 07:49:18 launcher.py:22] Route: /version, Methods: GET
    INFO 03-04 07:49:18 launcher.py:22] Route: /v1/chat/completions, Methods: POST
    INFO 03-04 07:49:18 launcher.py:22] Route: /v1/completions, Methods: POST
    INFO 03-04 07:49:18 launcher.py:22] Route: /v1/embeddings, Methods: POST
    INFO:     Started server process [1]
    INFO:     Waiting for application startup.
    INFO:     Application startup complete.
    INFO:     Uvicorn running on http://0.0.0.0:8080 (Press CTRL+C to quit)

Deploy the inference service using docker compose

  1. Prepare o arquivo docker-compose.yml.

    Execute o comando a seguir para abrir o arquivo docker-compose.yml.

    vi ~/docker-compose.yml

    Pressione a tecla i para entrar no modo de inserção e cole o seguinte conteúdo no arquivo docker-compose.yml.

    include the following:
      - path: /opt/alibaba/cai-docker/docker-compose.yml
        env_file: ./cai.env
    
    services:
      inference:
        image: egslingjun-registry.cn-wulanchabu.cr.aliyuncs.com/egslingjun/llm-inference:vllm0.5.4-deepgpu-llm24.7-pytorch2.4.0-cuda12.4-ubuntu22.04
        volumes:
          - /tmp/model:/tmp/model:shared
        deploy:
          resources:
            reservations:
              devices:
                - driver: nvidia
                  count: all
                  capabilities: [gpu]
        network_mode: host
        init: true
        command: "python3 -m vllm.entrypoints.openai.api_server --model=/tmp/model/ --trust-remote-code --port 8080"
        depends_on:
          cachefs:
            condition: service_healthy
            restart: true

    Pressione :wq e depois Enter para salvar o arquivo e sair do editor.

    Importante

    Se planeja modificar o arquivo docker-compose.yml para implantar outras cargas de trabalho descritas neste tópico, faça os seguintes ajustes:

    • Use a instrução include para importar o arquivo docker-compose.yml do CAI pré-instalado na imagem e use env_file para especificar o caminho do arquivo de configuração do CAI.

    • Adicione uma condição depends_on para o contêiner do serviço vLLM, garantindo que ele inicie após o contêiner cachefs.

    • O diretório do modelo descriptografado é montado no caminho especificado por MODEL_MOUNT_POINT no ambiente host. Portanto, adicione uma entrada de volumes correspondente para o contêiner do serviço vLLM compartilhar o diretório do modelo com o contêiner do serviço de inferência.

  2. Execute o serviço de inferência vLLM

    Execute o comando a seguir para iniciar o serviço de inferência vLLM.

    docker compose up -d

    A saída de exemplo a seguir indica que o serviço de inferência foi iniciado com sucesso.

    [+] Running 6/6
     ✔ Container root-attestation-agent-1      Healthy                                                                                                                                                                            3.6s 
     ✔ Container root-oss-1                    Healthy                                                                                                                                                                           10.2s 
     ✔ Container root-tng-1                    Healthy                                                                                                                                                                           44.2s 
     ✔ Container root-confidential-data-hub-1  Healthy                                                                                                                                                                           34.2s 
     ✔ Container root-cachefs-1                Healthy                                                                                                                                                                           54.7s 
     ✔ Container root-inference-1              Started

Etapa 6: Acesse o serviço de inferência na instância de computação confidencial heterogênea

Para acessar o serviço de inferência na instância de computação confidencial, prepare um ambiente cliente e instale o cliente Trusted Network Gateway (TNG). As etapas a seguir usam uma instância ECS comum como cliente.

1. Configure as permissões de acesso do ambiente cliente à instância de computação confidencial heterogênea e ao Trustee

O ambiente cliente acessa o serviço de inferência através do endereço IP público da instância de computação confidencial heterogênea. Adicione uma regra de grupo de segurança para permitir o acesso do cliente. O Trustee também é necessário para a atestação remota ao estabelecer um canal seguro, portanto, adicione o endereço IP público do cliente à lista de controle de acesso do Trustee.

  1. Adicione uma regra ao grupo de segurança da instância de computação confidencial heterogênea para permitir o acesso do cliente. Para mais informações, consulte Gerenciar regras de grupo de segurança.

  2. Adicione o endereço IP público do ambiente cliente ao controle de acesso do Trustee.

    Você já criou um grupo de políticas de controle de acesso e o adicionou à lista de permissões na Etapa 4: Configure as permissões de acesso da instância heterogênea ao OSS e ao Trustee. Portanto, não é necessário criar um novo. Basta adicionar o endereço IP público do cliente ao grupo de políticas de controle de acesso existente.

2. Implante o cliente Trusted Network Gateway na instância cliente

O Trusted Network Gateway (TNG) é um componente de rede projetado para cenários de computação confidencial. Ele atua como um processo daemon responsável por estabelecer canais de comunicação seguros e criptografar/descriptografar transparentemente o tráfego de rede de e para instâncias confidenciais, garantindo segurança de dados ponta a ponta. Além disso, permite controlar flexivelmente o processo de criptografia e descriptografia de tráfego conforme suas necessidades, sem modificar aplicativos existentes.

  1. Faça login em uma instância Linux usando o Workbench.

  2. Implante o cliente Trusted Network Gateway.

    Deploy using docker

    1. Instale o Docker na instância cliente. Para mais informações, consulte Instalar e usar Docker e Docker Compose.

    2. Execute o comando a seguir para implantar o cliente Trusted Network Gateway usando Docker.

      Importante

      Modifique o valor do campo as_addr para ${trsutee_url}/as/ com base no serviço Trustee implantado anteriormente.

      docker run --rm \
          --network=host \
          confidential-ai-registry.cn-shanghai.cr.aliyuncs.com/product/tng:2.2.1 \
          tng launch --config-content '
              {
                  "add_ingress": [
                      {
                          "http_proxy": {
                              "proxy_listen": {
                                  "host": "127.0.0.1",
                                  "port": 41000
                              }
                          },
                          "verify": {
                              "as_addr": "http://alb-xxxxxxxxxxxxxxxxxx.cn-shanghai.alb.aliyuncsslb.com/cai-test/as/",
                              "policy_ids": [
                                  "default"
                              ]
                          }
                      }
                  ]
              }
          '

    Deploy using a binary file

    1. Visite a página de releases do TNG no GitHub para obter o endereço de download do pacote de instalação binária compatível com a arquitetura da instância cliente.

    2. Execute o comando a seguir para baixar o arquivo binário do cliente Trusted Network Gateway. O exemplo a seguir usa tng-v2.2.1.x86_64-unknown-linux-gnu.tar.gz. Substitua pelo nome de arquivo real.

      wget https://github.com/inclavare-containers/TNG/releases/download/v2.2.1/tng-v2.2.1.x86_64-unknown-linux-gnu.tar.gz
    3. Execute o comando a seguir para descompactar o arquivo binário baixado e conceder permissões de execução ao arquivo.

      tar -zxvf tng-v2.2.1.x86_64-unknown-linux-gnu.tar.gz
      chmod +x tng
    4. Execute o comando a seguir para iniciar o cliente Trusted Network Gateway.

      Importante

      Modifique o valor do campo as_addr para ${trsutee_url}/as/ com base no serviço Trustee implantado anteriormente.

      ./tng launch --config-content '
              {
                  "add_ingress": [
                      {
                          "http_proxy": {
                              "proxy_listen": {
                                  "host": "127.0.0.1",
                                  "port": 41000
                              }
                          },
                          "verify": {
                              "as_addr": "http://alb-xxxxxxxxxxxxxxxxxx.cn-shanghai.alb.aliyuncsslb.com/cai-test/as/",
                              "policy_ids": [
                                  "default"
                              ]
                          }
                      }
                  ]
              }
          '

3. Configure o serviço de proxy HTTP para processos na instância cliente

Após a implantação, o cliente Trusted Network Gateway executa em primeiro plano e cria um serviço de proxy HTTP baseado no protocolo HTTP CONNECT em 127.0.0.1:41000. O tráfego roteado por este proxy é criptografado e enviado ao serviço vLLM através de um canal confiável.

Configure o proxy HTTP para os processos do cliente usando um dos métodos a seguir.

Configure the proxy by protocol type

export http_proxy=http://127.0.0.1:41000
export https_proxy=http://127.0.0.1:41000
export ftp_proxy=http://127.0.0.1:41000
export rsync_proxy=http://127.0.0.1:41000

Configure the proxy for all protocols

export all_proxy=http://127.0.0.1:41000

4. Acesse o serviço de inferência a partir da instância cliente

Acesse o serviço de inferência executando o comando curl no ambiente cliente.

  1. Abra uma nova janela de terminal para a instância cliente.

  2. Execute o comando a seguir para acessar o serviço de inferência.

    Nota
    • Substitua <heterogeneous_confidential_computing_instance_public_IP> no comando abaixo pelo endereço IP público da instância de computação confidencial heterogênea criada na Etapa 3: Crie uma instância de computação confidencial heterogênea.

    • O comando a seguir define a variável de ambiente all_proxy='http://127.0.0.1:41000/' antes da execução do comando curl. Isso garante que as requisições enviadas pelo comando curl sejam criptografadas pelo cliente Trusted Network Gateway e enviadas por um canal seguro.

    env all_proxy='http://127.0.0.1:41000/' \
        curl http://<heterogeneous_confidential_computing_instance_public_IP>:8080/v1/completions \
            -X POST \
            -H "Content-Type: application/json" \
            -d '{"model": "Qwen3-32B", "prompt": "Do you know the book Traction by Gino Wickman", "temperature": 0.0, "best_of": 1, "max_tokens": 132, "stream": false}'

    A saída de exemplo a seguir indica que a requisição enviada pelo cliente usando o comando curl foi criptografada pelo cliente Trusted Network Gateway e enviada por um canal seguro. O serviço de modelo de linguagem grande implantado na instância heterogênea foi acessado com sucesso.

    image

Perguntas frequentes

O contêiner cai-docker-oss falha ao iniciar durante a inicialização do serviço CAI.

  • Sintoma: O contêiner cai-docker-oss falha ao iniciar quando o serviço CAI é acionado.

    image

  • Causa: Esse problema geralmente ocorre porque a instância heterogênea não consegue acessar o bucket do OSS onde o texto cifrado do modelo está armazenado.

  • Solução: Verifique se a política de controle de acesso do OSS está configurada corretamente.

Ao iniciar o serviço CAI, o contêiner cai-docker-confidential-data-hub falha ao iniciar.

  • Sintoma: O contêiner cai-docker-confidential-data-hub falha ao iniciar quando o serviço CAI é acionado.

    image

  • Causa: Este erro indica um problema na obtenção da chave de descriptografia do modelo. Geralmente ocorre porque a instância heterogênea não consegue acessar a instância Trustee ou porque a chave configurada não existe.

  • Solução: Execute as etapas a seguir para solucionar o problema.

    • Verifique se o ID da chave configurado em cai.env está correto e reimplemente o serviço.

    • Confira se a URL da instância Trustee em cai.env está configurada corretamente.

    • Valide se a política de controle de acesso da instância Trustee está configurada adequadamente.

O contêiner cai-docker-tng falha ao iniciar quando o serviço CAI é acionado.

  • Sintoma: O contêiner cai-docker-tng falha ao iniciar durante a inicialização do serviço CAI.

  • Causa: Esse problema geralmente ocorre porque a instância heterogênea não consegue acessar o Trustee normalmente.

  • Solução: Realize as verificações a seguir para resolver a questão.

    • Verifique se a URL da instância Trustee em cai.env está configurada corretamente.

    • Confira se a política de controle de acesso da instância Trustee está configurada adequadamente.

O contêiner cai-docker-cachefs falhou ao iniciar durante a inicialização do serviço CAI.

  • Sintoma: O contêiner cai-docker-cachefs falha ao iniciar quando o serviço CAI é acionado.

    image

  • Causa: Esse problema geralmente ocorre devido a uma falha na descriptografia do modelo.

  • Solução: Siga os passos abaixo para solucionar o problema.

    • Verifique se a credencial de senha correta foi carregada no backend KMS do Trustee.

    • Confira se o valor do campo MODEL_ENCRYPTION_METHOD configurado em cai.env corresponde ao método de criptografia usado no modelo.

Como usar a ferramenta para coletar informações de erro após falha na inicialização do serviço CAI?

  • Sintoma: Ocorre um erro ao iniciar o serviço CAI e o problema não pode ser resolvido pelos métodos descritos nas Perguntas frequentes.

  • Solução: Execute o comando a seguir para usar a ferramenta de coleta de informações de erro.

    cai-bug-reporter.sh

    Após a execução do comando, um arquivo de log chamado ./cai-diagnostic.tar.gz é gerado no diretório atual. Envie um ticket para resolver o problema. Ao enviar o ticket, certifique-se de anexar este arquivo de log para que possamos diagnosticar e resolver a questão com mais eficiência.

Referências

Para mais informações sobre como construir um ambiente de computação confidencial heterogêneo, consulte Construir ambiente heterogêneo.