Implante o modelo Qwen-7B-Chat em instâncias de computação confidencial TDX do Alibaba Cloud. A atestação remota recupera a chave de descriptografia e permite proteger ativos de modelos de IA e dados sensíveis no nível de hardware durante a inferência.
Casos de uso
IA em conformidade para finanças e saúde: Processe textos com informações de identificação pessoal (PII) ou informações de saúde protegidas (PHI) usando computação confidencial. Isso evita a exposição de dados durante a inferência e atende aos requisitos de conformidade.
Bases de conhecimento corporativas privadas: Aprimore modelos de linguagem grandes com documentos internos sensíveis (relatórios financeiros, materiais de P&D) sem expor os dados como texto simples na nuvem. Esta solução protege tanto a base de conhecimento quanto o modelo ajustado no nível de hardware.
Proteção de ativos de modelos comerciais: Impeça a cópia ilegal ou o roubo de modelos de IA proprietários na nuvem e salvaguarde os ativos comerciais essenciais dos provedores de serviços de IA.
Visão geral da solução
O que é Confidential AI
Confidential AI é uma solução do Alibaba Cloud para executar tarefas de IA com segurança em ambientes de nuvem não confiáveis. Ela usa o hardware Intel TDX para criar um ambiente confidencial para seus modelos de IA e dados sensíveis, oferecendo proteção de privacidade de ponta a ponta.
Componentes principais
Trustee: Serviço de gerenciamento que armazena com segurança as chaves de descriptografia dos modelos de IA. Apenas solicitações aprovadas na atestação remota obtêm uma chave do Trustee.
Trustiflux: Agente implantado na instância TDX. Ele usa a atestação remota para provar ao Trustee que o ambiente de execução é um ambiente confidencial TDX genuíno e não adulterado. O Trustiflux só obtém a chave do Trustee após essa verificação.
Fluxo geral

No seu ambiente confiável: Baixe o modelo de IA original, criptografe-o e armazene a chave no Trustee.
-
No ambiente de computação confidencial (instância TDX):
O Trustiflux na instância TDX inicia a atestação remota e o Trustee a verifica. Após a verificação bem-sucedida, o Trustee envia a chave ao Trustiflux.
O Trustiflux recupera o modelo criptografado e o descriptografa com a chave recebida.
Carregue o modelo descriptografado e inicie o serviço de inferência de IA no ambiente confidencial.
Preparações
-
Prepare recursos ECS: Crie uma instância de computação confidencial TDX com estas configurações:
Região e Zona: China (Beijing) Zone I.
Tipo de instância: O Qwen-7B-Chat requer cerca de 30 GiB de memória. Selecione
ecs.g8i.4xlarge(16 vCPU, 64 GiB) ou superior.Imagem: Selecione
Alibaba Cloud Linux 3.2104 LTS 64-bite marque a opção Confidential VM.Endereço IP público: Marque Assign Public IPv4 Address. Escolha Pay-By-Traffic com largura de banda de pico de 100 Mbps para acelerar o download do modelo.
Disco de dados: Defina o disco do sistema com pelo menos
100 GiBpara armazenar o modelo e arquivos relacionados.
-
Configure o grupo de segurança: Permita tráfego de entrada nas portas a seguir. Para mais informações, consulte Gerencie regras de grupo de segurança.
22: Login remoto via Secure Shell (SSH).9090: Serviço HTTP temporário para fornecer o modelo criptografado.7860: Web UI do Qwen ou serviço de API.50005: (Opcional) Trusted Network Gateway (TNG) para garantir a segurança do canal de prompts e respostas de inferência.
Etapa 1: Prepare o modelo criptografado e a chave em um ambiente confiável
Baixe e criptografe o modelo e armazene a chave no Trustee. Nesta demonstração, essas etapas ocorrem na mesma instância TDX. Em produção, execute-as localmente ou em outro ambiente confiável.
-
Instale ferramentas básicas
Faça login na instância como usuário root e instale o Trustee, gocryptfs e outras dependências.
yum install -y trustee gocryptfs tmux git git-lfs wget && git lfs install # Start the trustee service systemctl start trustee
-
Baixe o modelo Qwen-7B-Chat
O download leva cerca de 15 a 20 minutos. Execute-o em uma sessão
tmuxpara evitar que desconexões SSH interrompam o processo.# Create a working directory mkdir -p /cai/trustee && cd /cai/trustee # Create and enter a tmux session named qwen_clone # Note: Using tmux prevents the download from being interrupted by network issues or a closed SSH client. tmux new-session -d -s qwen_clone "git clone https://www.modelscope.cn/qwen/Qwen-7B-Chat.git qwen-7b-chat --depth=1" # Monitor the download progress # Note: After the download is complete, the process will exit and show [exited]. tmux attach -t qwen_clone
-
Criptografe os arquivos do modelo
Crie um diretório criptografado com
gocryptfse mova os arquivos do modelo para ele para aplicar a criptografia automática.# Prepare directories for the encrypted data (cipher) and the plaintext mount target (plain) mkdir -p /cai/trustee/mount/{cipher,plain} # Create a password file for encryption. In a production environment, use a more secure, random password. printf '123456' > /cai/trustee/sample_password # Use the password file to initialize the gocryptfs encrypted directory cat /cai/trustee/sample_password | gocryptfs -init /cai/trustee/mount/cipher # Mount the encrypted directory to the plaintext mount target as a background process (cat /cai/trustee/sample_password | gocryptfs /cai/trustee/mount/cipher /cai/trustee/mount/plain &) && sleep 2 # Move model files to plaintext mount target for encryption mv /cai/trustee/qwen-7b-chat/ /cai/trustee/mount/plain # After the operation is complete, unmount the plaintext mount target fusermount -u /cai/trustee/mount/plainResultado esperado
Execute
ls /cai/trustee/mount/cipherpara verificar se nomes de arquivos criptografados aparecem em vez deqwen-7b-chat. Executels /cai/trusteepara confirmar que o diretórioqwen-7b-chatnão existe mais.
-
Salve a chave no Trustee
Armazene o arquivo de senha no repositório de chaves do
Trustee.mkdir -p /opt/trustee/kbs/repository/cai/sample/ mv /cai/trustee/sample_password /opt/trustee/kbs/repository/cai/sample/password
-
Inicie o serviço HTTP local
Inicie um servidor web temporário para disponibilizar os arquivos do modelo criptografado.
# This command starts a service listening on 127.0.0.1:9090. Keep this terminal window running. cd /cai/trustee/mount/cipher && python3 -m http.server 9090 --bind 127.0.0.1
Etapa 2: Descriptografe e monte o modelo no ambiente de nuvem confidencial
Realize as operações desta seção em uma segunda janela de terminal SSH.
Antes de começar, certifique-se de que o serviço iniciado com o comando
python3 -m http.serverna Etapa 1 ainda esteja em execução na primeira janela do terminal. Caso contrário, o comandowgetnesta seção falhará por não encontrar a fonte de download.
-
Instale o Trustiflux
Na segunda janela do terminal, instale o attestation-agent, o confidential-data-hub e as dependências.
yum install -y attestation-agent confidential-data-hub gocryptfs wget
-
Realize a atestação remota e obtenha a chave
Configure e inicie o serviço de atestação, que se comunica com o Trustee local (127.0.0.1). Após a verificação bem-sucedida, ele recupera e salva a chave do modelo.
A segurança da transferência da chave é garantida pelo Protocolo de Atestação KBS , um protocolo de criptografia de camada de aplicação baseado em Ambiente de Execução Confiável (TEE) entre o Trustiflux e o Trustee.
# Configure attestation-agent and confidential-data-hub to communicate with the local Trustee sed -i "/^\[token_configs\.kbs\]$/,/^$/ s|^url = .*|url = \"http://127.0.0.1:8080\"|" \ /etc/trustiflux/attestation-agent.toml sed -i "/^\[token_configs\.coco_as\]$/,/^$/ s|^url = .*|url = \"http://127.0.0.1:50004\"|" \ /etc/trustiflux/attestation-agent.toml sed -i 's|\(url\s*=\s*"\)[^"]*|\1http://127.0.0.1:8080|' \ /etc/trustiflux/confidential-data-hub.toml # Start the attestation agent, then request the key resource attestation-agent -c /etc/trustiflux/attestation-agent.toml > /dev/null 2>&1 & PID=$! && sleep 1 password=$(confidential-data-hub \ -c /etc/trustiflux/confidential-data-hub.toml \ get-resource \ --resource-uri kbs:///cai/sample/password) mkdir -p /cai/trustiflux && echo "$password" | base64 -d > "/cai/trustiflux/sample_password"Resultado esperado
O arquivo de senha com o conteúdo
123456é salvo em/cai/trustiflux/sample_password.Se o arquivo não for encontrado, verifique se o serviço HTTP local da Etapa 1 está em execução.
-
Recupere e descriptografe o modelo
# Use wget to recursively download the encrypted model files exposed in Step 1.5 wget -c --tries=30 --timeout=30 --waitretry=15 \ -r -np -nH --cut-dirs=0 -R "index.html*" \ --progress=dot:giga --show-progress \ -P /cai/trustiflux/mount/cipher \ http://127.0.0.1:9090 # Create a plaintext mount target mkdir -p /cai/trustiflux/mount/plain # Use the key obtained through remote attestation to mount the downloaded encrypted model directory to the plaintext mount target gocryptfs -debug -passfile /cai/trustiflux/sample_password /cai/trustiflux/mount/cipher /cai/trustiflux/mount/plainResultado esperado
O terminal exibe
Filesystem mounted and ready. Executels /cai/trustiflux/mount/plainpara visualizar o diretórioqwen-7b-chatdescriptografado.Se o
wgetretornar um erro "Connection refused" ao baixar o modelo criptografado, verifique se o serviço HTTP local da Etapa 1 está em execução.
Etapa 3: Inicie e acesse o serviço de inferência Qwen
Realize as operações desta seção em uma terceira janela de terminal SSH.
-
Prepare o ambiente Python e as dependências
Na terceira janela do terminal, crie e ative um ambiente Conda Python.
# Download and install Miniconda wget https://repo.anaconda.com/miniconda/Miniconda3-py39_23.11.0-2-Linux-x86_64.sh bash Miniconda3-py39_23.11.0-2-Linux-x86_64.sh -b -p $HOME/miniconda # Activate the Conda environment source $HOME/miniconda/bin/activate # Create and activate a dedicated Python 3.10 environment conda create -n pytorch_env python=3.10 -y conda activate pytorch_envResultado esperado
O texto
(pytorch_env)aparece antes do prompt do terminal.
-
Inicie o serviço usando um dos métodos a seguir
Para chamar o modelo programaticamente via API, escolha Iniciar o serviço de API compatível com OpenAI.
Para interagir com o modelo via interface gráfica, escolha Iniciar o serviço Web UI.
Para conversar com o modelo diretamente no terminal do servidor, escolha Iniciar o chat interativo via linha de comando.
Iniciar o serviço de API compatível com OpenAI
# Activate the dedicated Python 3.10 environment source $HOME/miniconda/bin/activate conda activate pytorch_env cd /cai/trustiflux git clone https://github.com/QwenLM/Qwen.git cd Qwen pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu pip3 install -r requirements.txt && pip3 install fastapi uvicorn "openai<1.0" pydantic sse_starlette python openai_api.py -c ../mount/plain/qwen-7b-chat --cpu-only --server-name 0.0.0.0 --server-port 7860Como acessar: Em qualquer terminal com acesso ao endereço IP público da instância ECS, use o comando
curlpara fazer a chamada.Este tópico usa um terminal local como exemplo.
curl -X POST http://<Public IP address of the TDX instance>:7860/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "Qwen", "messages": [ { "role": "system", "content": "You are a helpful assistant." }, { "role": "user", "content": "Who are you?" } ] }'A saída é mostrada na figura a seguir.

Iniciar o serviço Web UI
# Activate the dedicated Python 3.10 environment source $HOME/miniconda/bin/activate conda activate pytorch_env cd /cai/trustiflux git clone https://github.com/QwenLM/Qwen.git cd Qwen pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu pip3 install -r requirements.txt && pip3 install -r requirements_web_demo.txt python3 web_demo.py -c ../mount/plain/qwen-7b-chat --cpu-only --server-name 0.0.0.0 --server-port 7860Como acessar: Na barra de endereços do navegador local, insira
http://<Public IP address of the ECS instance>:7860.Iniciar o chat interativo via linha de comando
# Activate the dedicated Python 3.10 environment source $HOME/miniconda/bin/activate conda activate pytorch_env cd /cai/trustiflux git clone https://github.com/QwenLM/Qwen.git cd Qwen pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu pip3 install -r requirements.txt python3 cli_demo.py -c ../mount/plain/qwen-7b-chat --cpu-onlyComo acessar: Após a inicialização, digite sua pergunta diretamente no prompt
User>no terminal. A figura a seguir mostra um exemplo.
Etapa 4: (Opcional) Melhore a segurança do canal com TNG
Use o Trusted Network Gateway (TNG) para criptografia de ponta a ponta entre o cliente e o ambiente de nuvem confidencial. Isso impede a interceptação de prompts e respostas de inferência durante a transmissão.
Este exemplo mostra como interagir com o modelo via API. Antes de começar, certifique-se de que o serviço de API compatível com OpenAI da Etapa 3 esteja em execução.
-
Implante o TNG no servidor (instância TDX)
Abra uma quarta janela de terminal na instância TDX e execute:
yum install -y trusted-network-gateway tng launch --config-content '{ "add_egress": [{ "netfilter": { "capture_dst": { "port": 7860 }, "capture_local_traffic": true, "listen_port": 40001 }, "attest": { "aa_addr": "unix:///run/confidential-containers/attestation-agent/attestation-agent.sock" } }] }'
-
Implante o TNG no cliente (máquina local)
Baixe e execute o TNG na sua máquina local:
Mais versões do TNG
Máquina local é x86_64
# x86_64 wget https://github.com/inclavare-containers/TNG/releases/download/v2.2.4/tng-v2.2.4.x86_64-unknown-linux-gnu.tar.gz tar -zxvf tng-v2.2.4.x86_64-unknown-linux-gnu.tar.gz && chmod +x tng ./tng launch --config-content '{ "add_ingress": [{ "http_proxy": { "proxy_listen": { "host": "127.0.0.1", "port": 41000 } }, "verify": { "as_addr": "http://<Public IP address of the TDX instance>:50005", "policy_ids": [ "default" ] } }] }'Máquina local é aarch64
# aarch64 wget https://github.com/inclavare-containers/TNG/releases/download/v2.2.4/tng-v2.2.4.aarch64-unknown-linux-gnu.tar.gz tar -zxvf tng-v2.2.4.aarch64-unknown-linux-gnu.tar.gz && chmod +x tng ./tng launch --config-content '{ "add_ingress": [{ "http_proxy": { "proxy_listen": { "host": "127.0.0.1", "port": 41000 } }, "verify": { "as_addr": "http://<Public IP address of the TDX instance>:50005", "policy_ids": [ "default" ] } }] }'
-
Acesse o serviço pelo proxy TNG
Abra um novo terminal local, configure o proxy HTTP e interaja com o modelo pelo canal criptografado:
# Temporarily set an environment variable to configure the HTTP proxy export http_proxy=http://127.0.0.1:41000 # Interact with the model through the API curl -X POST http://<Public IP address of the TDX instance>:7860/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "Qwen", "messages": [ { "role": "system", "content": "You are a helpful assistant." }, { "role": "user", "content": "Who are you?" } ] }'
FAQ
Erro durante a instalação do trustee: "Error: Transaction test error"
Causa: Dependências SGX ou TDX existentes no sistema entram em conflito com o Trustee.
Solução: Execute yum remove libsgx-dcap-default-qpl libsgx-dcap-quote-verify e tente a instalação novamente.
O wget falha ao baixar o modelo criptografado com erro "Connection refused"
Causa: O serviço python3 -m http.server iniciado na Etapa 1 parou.
Solução: Retorne à primeira janela do terminal e verifique se o serviço está em execução. Se estiver parado, acesse o diretório /cai/trustee/mount/cipher e reinicie-o.
Não é possível acessar a Web UI no navegador (http://<Public IP address of the ECS instance>:7860)
Causas e solução de problemas:
Regra de grupo de segurança: Verifique se o grupo de segurança permite tráfego de entrada na porta TCP 7860 proveniente da internet.
Endereço de escuta do serviço: Certifique-se de que o comando de inicialização inclui
--server-name 0.0.0.0.Status do serviço: Na terceira janela do terminal, verifique se o processo
web_demo.pyainda está em execução corretamente.
Erro ao obter o arquivo de chave: {code: 111, kind: ConnectionRefused, message: "Connection refused"}
Causa 1: Execute systemctl status trustee para verificar o serviço Trustee. Se o status for inactive, o serviço não está em execução.
Solução: Execute systemctl start trustee para iniciar o serviço.
Causa 2: A política padrão de atestação remota é muito restritiva e causa falha na verificação do ambiente TDX.
Solução: (Apenas para desenvolvimento e staging) Execute sed -i 's/^default allow = false$/default allow = true/' /opt/trustee/kbs/policy.rego para permitir temporariamente que a verificação seja bem-sucedida.