Configure um ambiente de computação confidencial heterogênea em uma instância gn8v-tee e verifique a computação confidencial da GPU com um código de exemplo.
Contexto
As instâncias de computação confidencial heterogênea do Alibaba Cloud (gn8v-tee) estendem as instâncias de computação confidencial TDX da CPU ao incorporar uma GPU ao Trusted Execution Environment (TEE). Isso protege as transferências de dados entre CPU e GPU, além da computação de dados na GPU. Para criar um ambiente de computação confidencial TDX da CPU e verificar o atestado remoto, consulte Build a TDX confidential computing environment. Para configurar um ambiente de AI Agent confidencial em instâncias de computação confidencial heterogênea, consulte Build an OpenClaw confidential AI agent on heterogeneous confidential computing instances.
A GPU em uma instância de computação confidencial heterogênea inicia no modo de computação confidencial. Os seguintes mecanismos garantem a confidencialidade:
O TDX impede que o Hypervisor/Host OS acesse registradores sensíveis ou dados de memória da instância.
Um firewall PCIe bloqueia o acesso da CPU aos registradores críticos e à memória de vídeo protegida da GPU. O Hypervisor/Host OS só consegue executar operações limitadas, como redefinir a GPU, mas não acessa dados sensíveis.
O NVLink Firewall da GPU impede que outras GPUs acessem diretamente sua memória de vídeo.
Durante a inicialização, o driver da GPU e as funções de biblioteca dentro do TEE da CPU estabelecem um canal criptografado com a GPU por meio do protocolo SPDM. Após a negociação de chaves, apenas texto cifrado é transmitido via PCIe entre a CPU e a GPU.
-
A capacidade de atestado remoto da GPU confirma que ela está em um estado seguro.
Aplicações em uma instância de computação confidencial podem usar o Attestation SDK para chamar o driver da GPU e obter um relatório criptográfico do status de segurança da GPU. Esse relatório contém informações assinadas criptograficamente sobre o hardware da GPU, VBIOS e medições de status do hardware. Uma parte confiável pode comparar essas medições com as medições de referência do fornecedor da GPU para verificar se a GPU está em um estado seguro de computação confidencial.
Observações de uso
A computação confidencial heterogênea requer imagens do Alibaba Cloud Linux 3. Se você utilizar uma imagem personalizada baseada no Alibaba Cloud Linux 3, certifique-se de que a versão do kernel seja 5.10.134-18 ou posterior.
Crie uma instância de computação confidencial heterogênea (gn8v-tee)
Console
A criação de uma instância de computação confidencial heterogênea é semelhante à criação de uma instância padrão, mas exige configurações específicas. Para configurações gerais, consulte Create an instance using the wizard.
Acesse ECS console - Instances.
No canto superior esquerdo da página, selecione uma região e um grupo de recursos.
-
Clique em Create Instance e configure a instância com as seguintes definições.
Item de Configuração
Descrição
Region and Zone
China (Beijing) Zone L
Instance Type
ecs.gn8v-tee.4xlarge ou superior.
Image
Selecione a imagem Alibaba Cloud Linux 3.2104 LTS 64-bit.
Public IP Address
Assign Public IPv4 Address. Necessário para baixar o driver NVIDIA posteriormente.
ImportanteAo criar ou reiniciar uma instância confidencial com 8 GPUs, não anexe ENIs secundárias adicionais ou discos de dados. Essa ação pode causar falha na inicialização.
Conclua a criação da instância seguindo as instruções na tela.
API/CLI
Chame a operação RunInstances ou use a CLI do Alibaba Cloud para criar uma instância ECS com TDX habilitado. Parâmetros principais:
|
Parâmetro |
Descrição |
Exemplo |
|
RegionId |
China (Beijing) |
cn-beijing |
|
ZoneId |
Zone L |
cn-beijing-l |
|
InstanceType |
ecs.gn8v-tee.4xlarge ou superior. |
ecs.gn8v-tee.4xlarge |
|
ImageId |
ID de uma imagem compatível com computação confidencial. Apenas imagens de 64 bits do Alibaba Cloud Linux 3.2104 LTS com versão de kernel 5.10.134-18.al8.x86_64 ou posterior. |
aliyun_3_x64_20G_alibase_20250117.vhd |
Exemplo de CLI:
<SECURITY_GROUP_ID>: ID do grupo de segurança.<VSWITCH_ID>: ID do vSwitch.<KEY_PAIR_NAME>: Nome do par de chaves SSH.
aliyun ecs RunInstances \
--RegionId cn-beijing \
--ZoneId cn-beijing-l \
--SystemDisk.Category cloud_essd \
--ImageId 'aliyun_3_x64_20G_alibase_20250117.vhd' \
--InstanceType 'ecs.gn8v-tee.4xlarge' \
--SecurityGroupId '<SECURITY_GROUP_ID>' \
--VSwitchId '<VSWITCH_ID>' \
--KeyPairName <KEY_PAIR_NAME>
Configure o ambiente de computação confidencial heterogênea
Etapa 1: Instale o driver NVIDIA e o CUDA Toolkit
As instâncias de computação confidencial heterogênea demoram bastante para inicializar. Aguarde até que o status da instância seja Running e o sistema operacional tenha iniciado completamente.
As etapas de instalação variam conforme o tipo de instância:
Instâncias confidenciais com GPU única: ecs.gn8v-tee.4xlarge e ecs.gn8v-tee.6xlarge
Instâncias confidenciais com 8 GPUs: ecs.gn8v-tee-8x.16xlarge e ecs.gn8v-tee-8x.48xlarge
Instâncias confidenciais com GPU única
Conecte-se à instância de computação confidencial. Consulte Connect to Linux.
-
Defina o buffer SWIOTLB para 8 GB.
sudo grubby --update-kernel=ALL --args="swiotlb=4194304,any" Reinicie a instância. Consulte Restart an instance.
-
Baixe o driver NVIDIA e o CUDA Toolkit.
Instâncias confidenciais com GPU única exigem a versão do driver
550.144.03ou posterior. Este exemplo usa a versão550.144.03.wget --referer=https://www.nvidia.cn/ https://cn.download.nvidia.cn/tesla/550.144.03/NVIDIA-Linux-x86_64-550.144.03.run wget https://developer.download.nvidia.com/compute/cuda/12.4.1/local_installers/cuda_12.4.1_550.54.15_linux.run -
Instale as dependências e desative o service CloudMonitor.
sudo yum install -y openssl3 sudo systemctl disable cloudmonitor sudo systemctl stop cloudmonitor -
Crie e configure o arquivo
nvidia-persistenced.service.cat > nvidia-persistenced.service << EOF [Unit] Description=NVIDIA Persistence Daemon Wants=syslog.target Before=cloudmonitor.service [Service] Type=forking ExecStart=/usr/bin/nvidia-persistenced --user root ExecStartPost=/usr/bin/nvidia-smi conf-compute -srs 1 ExecStopPost=/bin/rm -rf /var/run/nvidia-persistenced [Install] WantedBy=multi-user.target EOF sudo cp nvidia-persistenced.service /usr/lib/systemd/system/nvidia-persistenced.service -
Instale o driver NVIDIA e o CUDA Toolkit.
sudo bash NVIDIA-Linux-x86_64-550.144.03.run --ui=none --no-questions --accept-license --disable-nouveau --no-cc-version-check --install-libglvnd --kernel-module-build-directory=kernel-open --rebuild-initramfs sudo bash cuda_12.4.1_550.54.15_linux.run --silent --toolkit -
Inicie os services nvidia-persistenced e CloudMonitor.
sudo systemctl start nvidia-persistenced.service sudo systemctl enable nvidia-persistenced.service sudo systemctl start cloudmonitor sudo systemctl enable cloudmonitor
Instâncias confidenciais com 8 GPUs
-
Conecte-se à instância de computação confidencial. Consulte Connect to Linux.
ImportanteAs instâncias de computação confidencial têm inicialização lenta. Aguarde a conclusão do processo antes de prosseguir.
-
Defina o buffer SWIOTLB para 8 GB.
sudo grubby --update-kernel=ALL --args="swiotlb=4194304,any" -
Configure o comportamento de carregamento do driver NVIDIA e regenere o initramfs.
sudo bash -c 'cat > /etc/modprobe.d/nvidia-lkca.conf << EOF install nvidia /sbin/modprobe ecdsa_generic; /sbin/modprobe ecdh; /sbin/modprobe --ignore-install nvidia options nvidia NVreg_RegistryDwords="RmEnableProtectedPcie=0x1" EOF' sudo dracut --regenerate-all -f Reinicie a instância. Consulte Restart an instance.
-
Baixe o driver NVIDIA e o CUDA Toolkit.
Instâncias de computação confidencial com 8 GPUs exigem a versão do driver
570.148.08ou posterior e oFabric Managercorrespondente. Este exemplo usa a versão570.148.08.wget --referer=https://www.nvidia.cn/ https://cn.download.nvidia.cn/tesla/570.148.08/NVIDIA-Linux-x86_64-570.148.08.run wget https://developer.download.nvidia.com/compute/cuda/12.8.1/local_installers/cuda_12.8.1_570.124.06_linux.run wget https://developer.download.nvidia.cn/compute/cuda/repos/rhel8/x86_64/nvidia-fabric-manager-570.148.08-1.x86_64.rpm -
Instale as dependências e desative o service CloudMonitor.
sudo yum install -y openssl3 sudo systemctl disable cloudmonitor sudo systemctl stop cloudmonitor -
Crie e configure o arquivo
nvidia-persistenced.service.cat > nvidia-persistenced.service << EOF [Unit] Description=NVIDIA Persistence Daemon Wants=syslog.target Before=cloudmonitor.service After=nvidia-fabricmanager.service [Service] Type=forking ExecStart=/usr/bin/nvidia-persistenced --user root --uvm-persistence-mode --verbose ExecStartPost=/usr/bin/nvidia-smi conf-compute -srs 1 ExecStopPost=/bin/rm -rf /var/run/nvidia-persistenced TimeoutStartSec=900 TimeoutStopSec=60 [Install] WantedBy=multi-user.target EOF sudo cp nvidia-persistenced.service /usr/lib/systemd/system/nvidia-persistenced.service -
Instale o Fabric Manager, o driver NVIDIA e o CUDA Toolkit.
sudo rpm -ivh nvidia-fabric-manager-570.148.08-1.x86_64.rpm sudo bash NVIDIA-Linux-x86_64-570.148.08.run --ui=none --no-questions --accept-license --disable-nouveau --no-cc-version-check --install-libglvnd --kernel-module-build-directory=kernel-open --rebuild-initramfs sudo bash cuda_12.8.1_570.124.06_linux.run --silent --toolkit -
Inicie e ative os services nvidia-fabricmanager, nvidia-persistenced e cloudmonitor.
sudo systemctl start nvidia-fabricmanager.service sudo systemctl enable nvidia-fabricmanager.service sudo systemctl start nvidia-persistenced.service sudo systemctl enable nvidia-persistenced.service sudo systemctl start cloudmonitor sudo systemctl enable cloudmonitor
Etapa 2: Verifique o status do TDX
Este recurso depende do TDX. Verifique o status do TDX para confirmar que a instância está protegida.
-
Verifique se o TDX está habilitado.
lscpu |grep -i tdx_guestSe a saída contiver
tdx_guest, o TDX está habilitado.[root@iZwzxxxxxxxx:~]# lscpu |grep -i tdx_guest Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc bts rep_good nopl xtopology tsc_known_freq pni pclmulqdq dtes64 ds_cpl ssse3 sdbg fma cx16 pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch cpuid_fault invpcid_single sbd ibrs ibpb stibp ibrs_enhanced tdx_guest fsgsbase bmi1 hle avx2 smep bmi2 erms invpcid rtm avx512f avx512dq rdseed adx smap avx512ifma clflushopts clwb avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves avx_vnni avx512_bf16 wbnoinvd avx512vbmi umip pku ospke avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg avx512_vpopcntdq rdpid bus_lock_detect cldemote movdiri movdir64b _vp2intersect md_clear serialize tsxldtrk amx_bf16 avx512_fp16 amx_tile amx_int8 flush_l1d arch_capabilities -
Verifique a instalação dos drivers relacionados ao TDX.
ls -l /dev/tdx_guestA seguinte saída indica que os drivers relacionados ao TDX estão instalados.
[ ~@iz2ze ~]# ls -l /dev/tdx_guest crw------- 1 root root 10, 125 Jan 30 16:51 /dev/tdx_guest
Etapa 3: Verifique o status do recurso de computação confidencial da GPU
Instâncias confidenciais com GPU única
Verifique o status da computação confidencial.
nvidia-smi conf-compute -f
CC status: ON indica que a computação confidencial está habilitada. CC status: OFF indica que o recurso está desabilitado devido a um erro na instância. Se isso ocorrer, abra um ticket.
Instâncias confidenciais com 8 GPUs
Verifique o status da computação confidencial.
nvidia-smi conf-compute -mgm
Multi-GPU Mode: Protected PCIe indica que a computação confidencial multi-GPU está habilitada. Multi-GPU Mode: None indica que o recurso está desabilitado devido a um erro na instância. Se isso ocorrer, abra um ticket.
Para instâncias confidenciais com 8 GPUs, o comando nvidia-smi conf-compute -f normalmente retorna CC status: OFF.
Etapa 4: Verifique a confiança da GPU e do NVSwitch usando atestado local
Instâncias confidenciais com GPU única
-
Instale as dependências de confiança da GPU.
sudo yum install -y python3.11 python3.11-devel python3.11-pip sudo alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 60 sudo alternatives --set python3 /usr/bin/python3.11 sudo python3 -m ensurepip --upgrade sudo python3 -m pip install --upgrade pip sudo python3 -m pip install nv_attestation_sdk==2.5.0.post6914366 nv_local_gpu_verifier==2.5.0.post6914366 nv_ppcie_verifier==1.5.0.post6914366 -f https://attest-public-cn-beijing.oss-cn-beijing.aliyuncs.com/repo/pip/attest.html -
Verifique o status de confiança da GPU.
python3 -m verifier.cc_admin --user_modeA saída indica que a GPU está no modo de computação confidencial e que medições como driver e VBIOS correspondem aos valores esperados:
Instâncias confidenciais com 8 GPUs
-
Instale as dependências de confiança da GPU.
sudo yum install -y python3.11 python3.11-devel python3.11-pip sudo alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 60 sudo alternatives --set python3 /usr/bin/python3.11 sudo python3 -m ensurepip --upgrade sudo python3 -m pip install --upgrade pip sudo python3 -m pip install nv_attestation_sdk==2.5.0.post6914366 nv_local_gpu_verifier==2.5.0.post6914366 nv_ppcie_verifier==1.5.0.post6914366 -f https://attest-public-cn-beijing.oss-cn-beijing.aliyuncs.com/repo/pip/attest.html -
Instale as dependências do NVSwitch.
wget https://developer.download.nvidia.cn/compute/cuda/repos/rhel8/x86_64/libnvidia-nscq-570-570.148.08-1.x86_64.rpm sudo rpm -ivh libnvidia-nscq-570-570.148.08-1.x86_64.rpm -
Verifique o status de confiança da GPU/NVSwitch.
python3 -m ppcie.verifier.verification --gpu-attestation-mode=LOCAL --switch-attestation-mode=LOCALO código de exemplo verifica oito GPUs e quatro NVSwitches.
SUCCESSindica que a verificação foi aprovada:All nvSwitches Attested Successfully **************************************************** * PPCIE: Switch attestation result is True * **************************************************** **************************************************** * PPCIE: Switch Attestation Completed * **************************************************** **************************************************** * PPCIE: GPU state is READY * **************************************************** +-------------------------+----------+ | STAGE | STATUS | +-------------------------+----------+ | GPU Pre-checks | SUCCESS | | Switch Pre-checks | SUCCESS | | GPU Attestation | SUCCESS | | Switch Attestation | SUCCESS | | Topology checks | SUCCESS | +-------------------------+----------+ **************************************************** * PPCIE: End of PPCIE Verification Tool * ****************************************************
Limitações
Este recurso herda as limitations of TDX instances.
Com a computação confidencial da GPU habilitada, as transferências de dados entre CPU e GPU exigem criptografia e descriptografia, resultando em menor desempenho nas tarefas da GPU em comparação com instâncias heterogêneas não confidenciais.
Observações de uso
-
Instâncias com GPU única usam CUDA 12.4. A biblioteca NVIDIA cuBLAS possui um problema conhecido que pode causar erros ao executar tarefas CUDA ou LLM. Instale uma versão específica do cuBLAS para resolver isso.
pip3 install nvidia-cublas-cu12==12.4.5.8 -
Com a computação confidencial da GPU habilitada, a inicialização é lenta, especialmente para instâncias com 8 GPUs. Após a inicialização do SO convidado, verifique se o
nvidia-persistencedterminou de iniciar antes de usar a GPU comnvidia-smiou outros comandos. Verifique o status do servicenvidia-persistenced:systemctl status nvidia-persistenced | grep "Active: "-
activating (start)— o service está iniciando.Active: activating (start) since Wed 2025-02-19 10:07:54 CST; 2min 20s ago -
active (running) — o service está em execução.
Active: active (running) since Wed 2025-02-19 10:10:28 CST; 22s ago
-
-
Services de início automático dependentes da GPU, como
cloudmonitor.service,nvidia-cdi-refresh.service(do nvidia-container-toolkit-base) ouollama.service, devem iniciar após onvidia-persistenced.service.Exemplo de configuração para
/usr/lib/systemd/system/nvidia-persistenced.service:[Unit] Description=NVIDIA Persistence Daemon Wants=syslog.target Before=cloudmonitor.service nvidia-cdi-refresh.service ollama.service After=nvidia-fabricmanager.service [Service] Type=forking ExecStart=/usr/bin/nvidia-persistenced --user root --uvm-persistence-mode --verbose ExecStartPost=/usr/bin/nvidia-smi conf-compute -srs 1 ExecStopPost=/bin/rm -rf /var/run/nvidia-persistenced TimeoutStartSec=900 TimeoutStopSec=60 [Install] WantedBy=multi-user.target