Todos os produtos
Search
Central de documentação

Alibaba Cloud Linux:Deploy a private Qwen-7B-Chat model with Intel TDX and Confidential AI

Última atualização: Jun 29, 2026

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

image

  1. No seu ambiente confiável: Baixe o modelo de IA original, criptografe-o e armazene a chave no Trustee.

  2. No ambiente de computação confidencial (instância TDX):

    1. 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.

    2. O Trustiflux recupera o modelo criptografado e o descriptografa com a chave recebida.

    3. 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-bit e 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 GiB para 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.

  1. 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
  1. Baixe o modelo Qwen-7B-Chat

    O download leva cerca de 15 a 20 minutos. Execute-o em uma sessão tmux para 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
  1. Criptografe os arquivos do modelo

    Crie um diretório criptografado com gocryptfs e 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/plain

    Resultado esperado

    Execute ls /cai/trustee/mount/cipher para verificar se nomes de arquivos criptografados aparecem em vez de qwen-7b-chat. Execute ls /cai/trustee para confirmar que o diretório qwen-7b-chat não existe mais.

  1. 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
  1. 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

Importante
  • 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.server na Etapa 1 ainda esteja em execução na primeira janela do terminal. Caso contrário, o comando wget nesta seção falhará por não encontrar a fonte de download.

  1. 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
  1. 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.
  1. 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/plain

    Resultado esperado

    O terminal exibe Filesystem mounted and ready. Execute ls /cai/trustiflux/mount/plain para visualizar o diretório qwen-7b-chat descriptografado.

    Se o wget retornar 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

Nota

Realize as operações desta seção em uma terceira janela de terminal SSH.

  1. 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_env

    Resultado esperado

    O texto (pytorch_env) aparece antes do prompt do terminal.

  1. 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 7860

    Como acessar: Em qualquer terminal com acesso ao endereço IP público da instância ECS, use o comando curl para 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.

    image

    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 7860

    Como 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-only

    Como acessar: Após a inicialização, digite sua pergunta diretamente no prompt User> no terminal. A figura a seguir mostra um exemplo.

    image

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.

Nota

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.

  1. 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" }
      }]
    }'
  1. 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" ] }
      }]
    }'
  1. 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:

  1. 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.

  2. Endereço de escuta do serviço: Certifique-se de que o comando de inicialização inclui --server-name 0.0.0.0.

  3. Status do serviço: Na terceira janela do terminal, verifique se o processo web_demo.py ainda 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.

Referências