Qwen-7B-Chat modelini Alibaba Cloud TDX güvenli bilişim örneklerine dağıtın. Uzak kanıtlama yöntemiyle şifre çözme anahtarı alarak AI model varlıklarını ve hassas verileri çıkarım sırasında donanım düzeyinde koruyun.
Kullanım senaryoları
Finans ve sağlık sektörleri için uyumlu AI: Kişisel tanımlayıcı bilgiler (PII) veya korunan sağlık bilgileri (PHI) içeren metinleri, çıkarım sırasında verileri açığa çıkarmadan işlemek için güvenli bilişimi kullanın ve yasal uyumluluk gereksinimlerini karşılayın.
Özel kurumsal bilgi tabanları: Büyük dil modelini dahili hassas belgelerle (finansal raporlar, Ar-Ge materyalleri) zenginleştirirken verilerin cloud ortamında düz metin olarak açığa çıkmasını önleyin. Bu çözüm, hem bilgi tabanı hem de ince ayar yapılmış model için donanım düzeyinde koruma sağlar.
Ticari model varlıklarının korunması: Özel AI modellerinin cloud ortamında yasa dışı kopyalanmasını veya çalınmasını önleyerek AI hizmet sağlayıcılarının temel ticari varlıklarını güvence altına alın.
Çözüm özeti
Confidential AI nedir
Confidential AI, AI görevlerinin güvenilmeyen cloud ortamlarında güvenli bir şekilde çalıştırılmasına yönelik bir Alibaba Cloud çözümüdür. Intel TDX donanımını kullanarak AI modelleriniz ve hassas verileriniz için güvenli bir ortam oluşturur ve uçtan uca gizlilik koruması sağlar.
Temel bileşenler
Trustee: AI modelleri için şifre çözme anahtarlarını güvenli bir şekilde saklayan bir anahtar yönetimi hizmetidir. Yalnızca uzak kanıtlamadan geçen istekler Trustee'den anahtar alabilir.
Trustiflux: TDX örneği içinde dağıtılan bir aracıdır. Çalışma zamanının gerçek ve değiştirilmemiş bir TDX güvenli ortamı olduğunu Trustee'ye kanıtlamak için uzak kanıtlama yöntemini kullanır. Doğrulama başarılı olduktan sonra Trustiflux, Trustee'den anahtarı alır.
Genel akış

Güvenilen ortamınızda: Orijinal AI modelini indirin, modeli şifreleyin ve ardından anahtarı Trustee'de saklayın.
-
Güvenli bilişim ortamında (TDX örneği):
TDX örneğindeki Trustiflux uzak kanıtlamayı başlatır. Trustee kanıtlamayı doğrular. Doğrulama başarılı olduktan sonra Trustee anahtarı Trustiflux'a gönderir.
Trustiflux şifrelenmiş modeli alır ve alınan anahtarı kullanarak şifresini çözer.
Şifresi çözülmüş modeli yükleyin ve güvenli ortamda AI çıkarım hizmetini başlatın.
Hazırlıklar
-
ECS kaynaklarını hazırlayın: Aşağıdaki yapılandırmalara sahip bir TDX güvenli bilişim örneği oluşturun:
Bölge ve Alan: Çin (Pekin) I Alanı.
Örnek Türü: Qwen-7B-Chat yaklaşık 30 GiB bellek gerektirir.
ecs.g8i.4xlarge(16 vCPU, 64 GiB) veya daha yüksek bir tür seçin.Görüntü:
Alibaba Cloud Linux 3.2104 LTS 64-bitseçin ve Confidential VM seçeneğini belirleyin.Genel IP adresi: Assign Public IPv4 Address seçeneğini belirleyin. Model indirmelerini hızlandırmak için 100 Mbps tepe bant genişliği ile Pay-By-Traffic seçeneğini belirleyin.
Veri Diski: Model ve ilgili dosyalar için sistem diskini en az
100 GiBolarak ayarlayın.
-
Güvenlik grubunu yapılandırın: Aşağıdaki bağlantı noktalarında gelen trafiğe izin verin. Daha fazla bilgi için bkz. Güvenlik grubu kurallarını yönetin.
22: Secure Shell (SSH) uzaktan oturum açma için.9090: Şifrelenmiş modeli sunan geçici HTTP hizmeti için.7860: Qwen Web UI veya API hizmeti için.50005: (İsteğe bağlı) Çıkarım istemlerinin ve yanıtlarının kanal güvenliğini sağlamak için Trusted Network Gateway (TNG) için.
Adım 1: Güvenilen bir ortamda şifrelenmiş modeli ve anahtarı hazırlayın
Modeli indirip şifreleyin, ardından anahtarı Trustee'de saklayın. Bu demo için bu adımlar aynı TDX örneğinde çalıştırılır. Üretim ortamında bunları yerel bilgisayarınızda veya başka bir güvenilen ortamda çalıştırın.
-
Temel araçları yükleyin
Örneğe root kullanıcı olarak oturum açın ve Trustee, gocryptfs ile diğer bağımlılıkları yükleyin.
yum install -y trustee gocryptfs tmux git git-lfs wget && git lfs install # Start the trustee service systemctl start trustee
-
Qwen-7B-Chat modelini indirin
İndirme işlemi yaklaşık 15-20 dakika sürer. SSH bağlantısının kesilmesinin indirmeyi kesintiye uğratmasını önlemek için bunu bir
tmuxoturumunda çalıştırın.# 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
-
Model dosyası şifreleme
gocryptfsile şifrelenmiş bir dizin oluşturun, ardından otomatik şifreleme için model dosyalarını bu dizine taşıyın.# 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/plainBeklenen sonuç
qwen-7b-chatyerine şifrelenmiş dosya adlarının göründüğünü doğrulamak içinls /cai/trustee/mount/cipherkomutunu çalıştırın.qwen-7b-chatdizininin artık mevcut olmadığını onaylamak içinls /cai/trusteekomutunu çalıştırın.
-
Anahtarı Trustee'ye kaydedin
Parola dosyasını
Trusteeanahtar deposunda saklayın.mkdir -p /opt/trustee/kbs/repository/cai/sample/ mv /cai/trustee/sample_password /opt/trustee/kbs/repository/cai/sample/password
-
Yerel HTTP hizmetini başlatın
Şifrelenmiş model dosyalarını sunmak için geçici bir web sunucusu başlatın.
# 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
Adım 2: Modeli güvenli cloud ortamında şifresini çözün ve bağlayın
Bu bölümdeki işlemleri ikinci bir SSH terminal penceresinde gerçekleştirin.
Başlamadan önce, Adım 1'deki
python3 -m http.serverkomutuyla başlatılan hizmetin ilk terminal penceresinde hala çalıştığından emin olun. Aksi takdirde, bu bölümdekiwgetkomutu indirme kaynağını bulamadığı için başarısız olur.
-
Trustiflux'u yükleyin
İkinci terminal penceresinde attestation-agent, confidential-data-hub ve bağımlılıkları yükleyin.
yum install -y attestation-agent confidential-data-hub gocryptfs wget
-
Uzak kanıtlama gerçekleştirin ve anahtarı alın
Yerel Trustee (127.0.0.1) ile iletişim kuran kanıtlama hizmetini yapılandırın ve başlatın. Doğrulama başarılı olduktan sonra model anahtarını alır ve kaydeder.
Anahtar aktarımının güvenliği, Trustiflux ve Trustee arasında Trusted Execution Environment (TEE) tabanlı bir uygulama katmanı şifreleme protokolü olan KBS Attestation Protocol tarafından garanti edilir.
# 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"Beklenen sonuç
İçeriği
123456olan parola dosyası/cai/trustiflux/sample_passwordkonumuna kaydedilir.Dosya bulunamazsa, Adım 1 'deki yerel HTTP hizmetini doğrulayın
-
Modeli alın ve şifresini çözün
# 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/plainBeklenen sonuç
Terminal
Filesystem mounted and readyçıktısını verir. Şifresi çözülmüşqwen-7b-chatdizinini görmek içinls /cai/trustiflux/mount/plainkomutunu çalıştırın.Şifrelenmiş modeli indirirken
wget"Connection refused" hatası döndürürse, Adım 1 'deki yerel HTTP hizmetini doğrulayın
Adım 3: Qwen çıkarım hizmetini başlatın ve erişin
Bu bölümdeki işlemleri üçüncü bir SSH terminal penceresinde gerçekleştirin.
-
Python ortamını ve bağımlılıkları hazırlayın
Üçüncü terminal penceresinde bir Conda Python ortamı oluşturun ve etkinleştirin.
# 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_envBeklenen sonuç
Terminal isteminin önünde
(pytorch_env)metni görünür.
-
Aşağıdaki yöntemlerden birini kullanarak hizmeti başlatın
Modeli programlı olarak bir API aracılığıyla çağırmak için OpenAI uyumlu API hizmetini başlatın seçeneğini belirleyin.
Modelle grafiksel bir arayüz üzerinden etkileşim kurmak için Web UI hizmetini başlatın seçeneğini belirleyin.
Modelle sunucu terminalinde doğrudan sohbet etmek için komut satırı etkileşimli sohbeti başlatın seçeneğini belirleyin.
OpenAI uyumlu API hizmetini başlatın
# 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 7860Nasıl erişilir: ECS örneğinin genel IP adresine erişebilen herhangi bir terminalde, çağrı yapmak için
curlkomutunu kullanın.Bu konuda örnek olarak yerel bir terminal kullanılmıştır.
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?" } ] }'Çıktı aşağıdaki şekilde gösterilmektedir.

Web UI hizmetini başlatın
# 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 7860Nasıl erişilir: Yerel tarayıcınızın adres çubuğuna
http://<ECS örneğinin Genel IP adresi>:7860girin.Komut satırı etkileşimli sohbeti başlatın
# 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-onlyNasıl erişilir: Başlatmadan sonra terminaldeki
User>isteminde sorunuzu doğrudan girin. Aşağıdaki şekilde bir örnek gösterilmektedir.
Adım 4: (İsteğe bağlı) TNG ile kanal güvenliğini artırın
İstemci ile güvenli cloud ortamı arasında uçtan uca şifreleme sağlamak için Trusted Network Gateway (TNG) kullanın; böylece çıkarım istemlerinin ve yanıtlarının iletim sırasında ele geçirilmesi önlenir.
Bu örnek, modelle bir API aracılığıyla nasıl etkileşim kurulacağını gösterir. Başlamadan önce, Adım 3'teki OpenAI uyumlu API hizmetinin çalıştığından emin olun.
-
Sunucuda (TDX örneği) TNG'yi dağıtın
TDX örneğinde dördüncü bir terminal penceresi açın ve şu komutu çalıştırın:
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" } }] }'
-
İstemcide (yerel makine) TNG'yi dağıtın
TNG'yi yerel makinenize indirin ve çalıştırın:
Daha fazla TNG sürümü
Yerel makine x86_64 mimarisine sahip
# 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" ] } }] }'Yerel makine aarch64 mimarisine sahip
# 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" ] } }] }'
-
TNG proxy'si üzerinden hizmete erişin
Yeni bir yerel terminal açın, HTTP proxy'sini yapılandırın ve şifrelenmiş kanal üzerinden modelle etkileşim kurun:
# 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?" } ] }'
SSS
Trustee kurulumu sırasında hata: "Error: Transaction test error"
Neden: Sistemdeki mevcut SGX veya TDX bağımlılıkları Trustee ile çakışıyor.
Çözüm: yum remove libsgx-dcap-default-qpl libsgx-dcap-quote-verify komutunu çalıştırın, ardından kurulumu yeniden deneyin.
wget şifrelenmiş modeli "Connection refused" hatasıyla indiremiyor
Neden: Adım 1'de başlatılan python3 -m http.server hizmeti durdu.
Çözüm: İlk terminal penceresine dönün ve hizmetin çalıştığını doğrulayın. Hizmet durmuşsa /cai/trustee/mount/cipher dizinine gidin ve hizmeti yeniden başlatın.
Tarayıcıda Web UI'a erişilemiyor (http://<ECS örneğinin Genel IP adresi>:7860)
Nedenler ve sorun giderme:
Güvenlik grubu kuralı: Güvenlik grubunun internetten TCP bağlantı noktası 7860'a gelen trafiğe izin verdiğini doğrulayın.
Hizmet dinleme adresi: Başlatma komutunun
--server-name 0.0.0.0içerdiğinden emin olun.Hizmet durumu: Üçüncü terminal penceresinde
web_demo.pyişleminin hala doğru şekilde çalıştığını doğrulayın.
Anahtar dosyası alınırken hata: {code: 111, kind: ConnectionRefused, message: "Connection refused"}
Neden 1: Trustee hizmetini kontrol etmek için systemctl status trustee komutunu çalıştırın. Durum inactive ise hizmet çalışmıyor demektir.
Çözüm: Hizmeti başlatmak için systemctl start trustee komutunu çalıştırın.
Neden 2: Varsayılan uzak kanıtlama ilkesi çok katı olduğundan TDX ortamı doğrulaması başarısız oluyor.
Çözüm: (Yalnızca geliştirme ve hazırlık ortamları için) Doğrulamanın başarılı olmasını geçici olarak sağlamak için sed -i 's/^default allow = false$/default allow = true/' /opt/trustee/kbs/policy.rego komutunu çalıştırın.