全部產品
Search
文件中心

Alibaba Cloud Linux:基於Confidential AI方案部署受Intel TDX保護的隱私Qwen-7B-Chat模型

更新時間:Sep 04, 2025

為保護AI模型資產或處理金融、醫學等敏感性資料,可使用阿里雲TDX機密計算執行個體,通過遠程證明擷取密鑰以解密和部署Qwen模型,實現AI推理過程的硬體級資料保護,從而保障核心資產安全。

應用情境

  • 金融/醫學行業的合規AI:在處理包含個人識別資訊或受保護健康資訊的文本時,利用機密計算確保資料在推理過程中不被泄露,滿足合規要求。

  • 企業私人知識庫:企業希望使用內部的、敏感的文檔(如財務報表、研發資料)來增強大模型,但又不希望這些核心資料在雲端以明文形式暴露。本方案可確保知識庫資料和微調後的模型都受到硬體保護。

  • 保護商業模型資產:對於AI服務提供者,其精心訓練的專有模型是核心商業資產。本方案可以防止模型在雲端被非法複製或竊取。

方案概述

Confidential AI方案介紹

Confidential AI是阿里雲提供的一種在不被信任的雲環境中安全執行AI任務的解決方案。它的核心價值在於,藉助Intel TDX等機密計算硬體技術,為AI模型和敏感性資料提供一個“硬體保險箱”(即機密環境),實現端到端的安全與隱私保護。

核心組件解釋

  • Trustee:可理解為“密鑰保險箱”。主要負責安全地儲存和管理用於解密AI模型的密鑰。只有經過嚴格遠程證明(Remote Attestation)的可信請求才能從中擷取密鑰。

  • Trustiflux:可以將其視為雲端的“可信守門員”。部署在TDX執行個體內部,核心職責是通過遠程證明流程,向Trustee證明當前運行環境是真實、未被篡改的TDX機密環境。只有“自證清白”後,Trustiflux才能從Trustee擷取密鑰。

整體流程概覽

image

  1. 您的可信環境中:下載原始AI模型 -> 加密模型 -> 將密鑰存入Trustee

  2. 機密計算環境中(TDX執行個體)

    1. TDX執行個體中的Trustiflux發起遠程證明 -> Trustee驗證證明 -> 驗證通過後,Trustee將密鑰發送給Trustiflux

    2. Trustiflux擷取加密的模型 -> 使用收到的密鑰解密模型。

    3. 在機密環境中載入解密後的模型,並啟動AI推理服務。

準備工作

  • ECS資源準備建立一台TDX機密計算執行個體,關鍵配置項如下:

    • 地區及可用性區域:華北2(北京)可用性區域I

    • 執行個體規格:Qwen-7B-Chat模型運行時約需30 GiB記憶體。為確保穩定,建議選擇ecs.g8i.4xlarge(16 vCPU, 64 GiB記憶體) 或更高規格。

    • 鏡像:選擇Alibaba Cloud Linux 3.2104 LTS 64位,並勾選機密虛擬機器選項。

    • 公網IP:務必勾選分配公網IPv4地址,頻寬建議選擇按使用流量並設定峰值為100 Mbps,以加速模型下載。

    • 資料盤:模型及相關檔案會佔用較大空間,建議系統硬碟至少為100 GiB

  • 安全性群組配置:在安全性群組中允許存取以下連接埠的入站流量。管理安全性群組規則

    • 22:用於SSH遠程登入。

    • 9090:用於後續步驟中,從雲端擷取加密模型的臨時HTTP服務。

    • 7860:用於訪問最終部署的Qwen Web UI或API服務。

    • 50005:(可選)用於TNG保證推理提示詞和推理響應結果的通道安全。

步驟一:在可信環境下準備加密模型和密鑰

首先需要完成模型下載、加密以及配置Trustee來保管密鑰。為方便示範,本文後續實操步驟在同一TDX執行個體中進行。在實際部署時,請在您的本地或可信環境下運行。

  1. 安裝基礎工具

    使用root使用者登入執行個體,安裝Trustee、gocryptfs及其他依賴。

    yum install -y trustee gocryptfs tmux git git-lfs wget && git lfs install
    
    # 啟動trustee服務
    systemctl start trustee
  1. 下載Qwen-7B-Chat模型

    模型檔案較大,下載耗時較長(約15-20分鐘),建議在tmux會話中執行,以防SSH串連斷開導致下載中斷。

    # 建立工作目錄
    mkdir -p /cai/trustee && cd /cai/trustee
    
    # 建立並進入一個名為 qwen_clone 的 tmux 會話
    # 提示:使用 tmux 可以防止因網路波動或SSH用戶端關閉導致下載任務中斷。
    tmux new-session -d -s qwen_clone "git clone https://www.modelscope.cn/qwen/Qwen-7B-Chat.git qwen-7b-chat --depth=1"
    
    # 觀察下載進度
    # 提示:下載完成後,進程會退出,並顯示[exited]
    tmux attach -t qwen_clone
  1. 加密模型檔案

    使用gocryptfs工具建立一個加密目錄,並將模型檔案移入,自動執行模型加密。

    # 準備用於存放加密資料(cipher)和解密後掛載點(plain)的目錄
    mkdir -p /cai/trustee/mount/{cipher,plain}
    
    # 建立一個密碼檔案用於加密。在生產環境中,應使用更安全的隨機密碼
    printf '123456' > /cai/trustee/sample_password
    
    # 使用密碼檔案初始化 gocryptfs 加密目錄
    cat /cai/trustee/sample_password | gocryptfs -init /cai/trustee/mount/cipher
    
    # 以後台進程方式,將加密目錄掛載到明文掛載點
    (cat /cai/trustee/sample_password | gocryptfs /cai/trustee/mount/cipher /cai/trustee/mount/plain &) && sleep 2
    
    # 將模型檔案移動到明文掛載點。gocryptfs會自動處理加密過程,將加密後的資料寫入cipher目錄。由於檔案較大,加密過程需等待5分鐘左右。
    mv /cai/trustee/qwen-7b-chat/ /cai/trustee/mount/plain
    
    # 操作完成,卸載明文掛載點
    fusermount -u /cai/trustee/mount/plain

    預期結果

    執行完畢後,運行ls /cai/trustee/mount/cipher,應該看到若干加密後的檔案名稱,而不是qwen-7b-chat。同時,運行ls /cai/trustee,確認qwen-7b-chat目錄已不存在。

  1. 儲存密鑰至Trustee

    將上一步中用到的密碼檔案,安全地存放到Trustee的密鑰庫中。

    mkdir -p /opt/trustee/kbs/repository/cai/sample/
    mv /cai/trustee/sample_password /opt/trustee/kbs/repository/cai/sample/password
  1. 啟動本地HTTP服務

    啟動一個臨時的Web伺服器,用於向雲端環境提供加密後的模型檔案。

    # 此命令會啟動一個監聽在127.0.0.1:9090的服務,保持此終端視窗運行
    cd /cai/trustee/mount/cipher && python3 -m http.server 9090 --bind 127.0.0.1

步驟二:在雲端機密環境中解密並掛載模型

重要
  • 請在第二個SSH終端視窗中進行本章操作。

  • 在執行操作前,請確保步驟一中通過python3 -m http.server命令啟動的服務仍在第一個終端中運行。否則,本章的wget命令將無法找到下載源而失敗。

  1. 安裝Trustiflux

    在第二個終端中,安裝attestation-agent(證明代理)和confidential-data-hub(機密資料中心)及相關環境依賴。

    yum install -y attestation-agent confidential-data-hub gocryptfs wget
  1. 執行遠程證明並擷取密鑰

    以下命令將配置並啟動證明服務,與本地的Trustee(在本例中為同一台機器的127.0.0.1)通訊,驗證成功後擷取模型密鑰並儲存。

    密鑰傳輸安全由 Trustiflux 和 Trustee 之間基於 TEE 的應用程式層加密協議(KBS Attestation Protocol)提供保障。
    # 配置attestation-agent和confidential-data-hub以與本地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
    
    # 啟動證明代理,然後請求密鑰資源
    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"

    預期結果

    命令成功執行後,可在/cai/trustiflux/sample_password路徑下找到內容為123456的密碼檔案。

    若沒有該檔案,需檢查步驟一本地HTTP服務是否處於運行中。未處於運行中需重新啟動服務並保持終端視窗運行。
  1. 擷取並解密模型

    # 使用wget遞迴下載在步驟 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
    
    
    # 建立明文掛載點
    mkdir -p /cai/trustiflux/mount/plain
    
    # 使用之前通過遠程證明擷取的密鑰,將下載的加密模型目錄掛載到明文掛載點
    gocryptfs -debug -passfile /cai/trustiflux/sample_password /cai/trustiflux/mount/cipher /cai/trustiflux/mount/plain

    預期結果

    命令執行後,終端將輸出Filesystem mounted and ready。執行ls /cai/trustiflux/mount/plain,可以看到解密後的qwen-7b-chat目錄。

    wget下載加密模型時串連被拒絕 (Connection refused),需檢查步驟一本地HTTP服務是否處於運行中。未處於運行中需重新啟動服務並保持終端視窗運行。

步驟三:啟動並訪問Qwen推理服務

說明

請在第三個SSH終端中執行本章操作。

  1. 準備Python環境與依賴

    在第三個終端中,使用Conda建立並啟用一個新的Python環境。

    # 下載並安裝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
    
    # 啟用Conda環境
    source $HOME/miniconda/bin/activate
    
    # 建立並啟用專用的Python 3.10環境
    conda create -n pytorch_env python=3.10 -y
    conda activate pytorch_env

    預期結果

    終端提示符前出現(pytorch_env)

  1. 選擇一種方式啟動服務(三選一)

    • 通過API編程方式調用模型:選擇啟動OpenAI相容的API服務

    • 通過圖形化介面與模型互動:選擇啟動Web UI服務

    • 直接在伺服器終端與模型對話:選擇啟動命令列互動式對話

    啟動OpenAI相容的API服務

    # 啟用專用的Python 3.10環境
    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

    訪問方式:在任何可以訪問ECS公網IP的終端上,使用curl命令調用:

    本文以本地終端為例。
    curl -X POST http://<TDX執行個體公網IP地址>: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?"
            }
        ]
    }'

    輸出如圖所示:

    image

    啟動Web UI服務

    # 啟用專用的Python 3.10環境
    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

    訪問方式:在您的本地瀏覽器地址欄輸入http://<ECS公網IP地址>:7860

    啟動命令列互動式對話

    # 啟用專用的Python 3.10環境
    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

    訪問方式:啟動後,直接在終端的User>提示符後輸入問題即可。如圖所示:

    image

步驟四:(可選)通過TNG增強通道安全

為了實現從用戶端到雲端機密環境的全鏈路加密,可使用可信網路網關(TNG)來保護通訊通道,防止推理提示詞和推理響應結果在傳輸過程中被竊聽。

說明

以通過API與模型對話為例,執行操作前,請確保步驟三中的OpenAI相容的API服務已啟動。

  1. 服務端(TDX執行個體)部署TNG

    在TDX執行個體上開啟第四個終端,執行以下命令:

    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. 用戶端(本地機器)部署TNG

    在您的本地機器上下載並運行TNG。

    TNG更多版本

    本地為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://<TDX執行個體公網IP地址>:50005", "policy_ids": [ "default" ] }
      }]
    }'

    本地為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://<TDX執行個體公網IP地址>:50005", "policy_ids": [ "default" ] }
      }]
    }'
  1. 通過TNG代理訪問服務

    開啟新的本地命令列,執行以下命令,配置HTTP代理後,通過加密通道與模型對話:

    # 臨時設定環境變數,配置HTTP代理
    export http_proxy=http://127.0.0.1:41000
    
    # 通過API與模型對話
    curl -X POST http://<TDX執行個體公網IP地址>: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)

  • 安裝trustee時報錯"Error: Transaction test error"

    原因:系統中已安裝的SGX/TDX依賴與trustee衝突。

    解決yum remove libsgx-dcap-default-qpl libsgx-dcap-quote-verify後再重新安裝。

  • wget下載加密模型時串連被拒絕 (Connection refused)

    原因:步驟一中第5步啟動的python3 -m http.server服務已停止。

    解決:返回到執行該命令的終端(第一個終端),確保服務仍在運行。如果已停止,請重新進入/cai/trustee/mount/cipher目錄並再次啟動它。

  • 瀏覽器無法訪問Web UI(http://<ECS公網IP地址>:7860

    原因與排查

    1. 安全性群組規則:檢查安全性群組是否已為公網允許存取TCP 7860連接埠。

    2. 服務監聽地址:確保啟動命令中包含了--server-name 0.0.0.0

    3. 服務運行狀態:在第三個終端檢查web_demo.py進程是否仍在正常運行。

  • 擷取密鑰檔案時報錯:{code: 111, kind: ConnectionRefused, message: "Connection refused"}

    原因:通過systemctl status trustee命令檢查執行個體的trustee服務是否處於運行中。若為inactive,代表未運行。

    解決:執行systemctl start trustee命令啟動trustee服務。

相關文檔