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.
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.
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.
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.
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
-
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 -yAnolisOS 23
sudo yum install anolis-epao-release -y sudo yum install gocryptfs -yDownload 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 -
Crie um arquivo de chave do Gocryptfs. Você fará o upload dessa chave para o Trustee posteriormente.
Este exemplo armazena a chave
0Bn4Q1wwY9fN3Pemcachefs-password. Em ambientes de produção, use uma chave aleatória forte.cat << EOF > ~/cachefs-password 0Bn4Q1wwY9fN3P EOF -
Use a chave criada para criptografar o modelo.
-
Configure o caminho do modelo em texto simples.
NotaEspecifique 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/ -
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
-
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 -
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.
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.
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
-
Acesse o console do KMS. No painel de navegação à esquerda, escolha . 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.
Após a ativação da instância, no painel de navegação à esquerda, escolha . 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.
-
No painel de navegação à esquerda, escolha . 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.
Acesse a página 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
-
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:
-
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.
-
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.
Confirm configuration: Confirme as informações de configuração e os termos de serviço e, em seguida, clique em em Create Kubernetes Cluster.
-
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
Conecte-se ao cluster pela rede pública ou por uma rede interna. Para mais informações, consulte Conectar-se a um cluster.
-
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}NotaO comando
helm plugin install...pode ser lento. Se falhar, executehelm plugin uninstall cm-pushe 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 -
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. -
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" } EOFUma 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 . 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.
Acesse a página de compra de instâncias.
Selecione a aba Custom Launch.
-
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 AIe selecione a imagemAlibaba Cloud Linux 3.2104 LTS 64-bit Single-card Confidential AI.NotaPara 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.
-
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.
-
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.
Faça login no console do OSS.
Clique em em Buckets e, em seguida, clique em no nome do bucket desejado.
No painel de navegação à esquerda, escolha .
Na aba Bucket Policy, clique em em Authorize. No painel exibido, conceda a permissão
Bucketao endereço IP público da instância de computação confidencial heterogênea.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 . 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
Conecte-se remotamente à instância heterogênea. Para mais informações, consulte Fazer login em uma instância Linux usando o Workbench.
-
Execute o comando a seguir para abrir o arquivo de configuração
~/cai.env.vi ~/cai.env -
Pressione a tecla
ipara 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" Digite
:wqe pressioneEnterpara salvar o arquivo e sair do editor.
2. Implante o serviço de inferência
Deploy the inference service using docker
-
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 porMODEL_MOUNT_POINTno ambiente host. Seu programa de serviço de inferência, como o vLLM, pode carregar o modelo a partir deste caminho.-
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 --waitA 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 -
Visualize o arquivo do modelo descriptografado
Para visualizar o arquivo do modelo descriptografado, execute o seguinte comando.
ls -la -R /tmp/modelA saída de exemplo a seguir indica que o arquivo do modelo foi descriptografado com sucesso.

-
-
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-32BA 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
-
Prepare o arquivo docker-compose.yml.
Execute o comando a seguir para abrir o arquivo docker-compose.yml.
vi ~/docker-compose.ymlPressione a tecla
ipara 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: truePressione
:wqe depoisEnterpara salvar o arquivo e sair do editor.ImportanteSe 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
includepara importar o arquivo docker-compose.yml do CAI pré-instalado na imagem e useenv_filepara especificar o caminho do arquivo de configuração do CAI.Adicione uma condição
depends_onpara 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_POINTno 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.
-
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 -dA 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.
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.
-
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.
-
Implante o cliente Trusted Network Gateway.
Deploy using docker
Instale o Docker na instância cliente. Para mais informações, consulte Instalar e usar Docker e Docker Compose.
-
Execute o comando a seguir para implantar o cliente Trusted Network Gateway usando Docker.
ImportanteModifique o valor do campo
as_addrpara${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
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.
-
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 -
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 -
Execute o comando a seguir para iniciar o cliente Trusted Network Gateway.
ImportanteModifique o valor do campo
as_addrpara${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.
Abra uma nova janela de terminal para a instância cliente.
-
Execute o comando a seguir para acessar o serviço de inferência.
NotaSubstitua
<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 comandocurl. Isso garante que as requisições enviadas pelo comandocurlsejam 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.

Perguntas frequentes
O contêiner cai-docker-oss falha ao iniciar durante a inicialização do serviço CAI.
Ao iniciar o serviço CAI, o contêiner cai-docker-confidential-data-hub falha ao iniciar.
O contêiner cai-docker-tng falha ao iniciar quando o serviço CAI é acionado.
O contêiner cai-docker-cachefs falhou ao iniciar durante a inicialização do serviço CAI.
Como usar a ferramenta para coletar informações de erro após falha na inicialização do serviço CAI?
Referências
Para mais informações sobre como construir um ambiente de computação confidencial heterogêneo, consulte Construir ambiente heterogêneo.


