全部產品
Search
文件中心

Elastic Compute Service:在TDX執行個體中部署端到端Retrieval Augment Generation(RAG)方案

更新時間:Jan 08, 2025

本文介紹如何在基於Intel® TDX (Trust Domain Extensions)技術的阿里雲g8i通用型執行個體(簡稱TDX執行個體)中部署檢索增強產生(Retrieval Augment Generation,RAG)方案。

背景資訊

  • 檢索增強產生(Retrieval Augment Generation,RAG)是當前業界流行的AI應用程式框架,其利用專有知識庫中的私人知識資料,在大模型的協助下,對使用者問題做出精確回答。廣泛應用於企業級知識庫、線上知識問答、智能助手等情境。然而,如何在雲上構建一個安全可信的環境來保護專有資料的安全和隱私,是當前面臨的一個挑戰。

  • 阿里雲g8i通用型執行個體基於Intel® TDX技術(簡稱TDX執行個體),構建了基於硬體層級的更高安全等級的可信機密環境,保障租戶系統級資料運行時的機密性與完整性。

  • 本實踐基於阿里雲TDX執行個體,提供了一套端到端安全部署RAG(基於Haystack軟體棧)線上問答系統的參考實現,保證使用者資料在各個階段的隱私和安全。您可以通過本文擷取以下資訊:

    • 加深對阿里雲伺服器TDX加密技術的理解。

    • 瞭解基於TDX加密技術實現的端到端的全資料生命週期安全方案。

    • 擷取雲端服務器TDX的參考架構和指令碼,輕鬆上手使用。

架構說明

RAG利用預訓練的大型語言模型,將提取到的知識片段融入回答產生的過程中,以豐富回答的內容和準確性。在知識提取的環節,憑藉詞向量的相似性來識別與使用者問題首選的知識內容。而在回答產生的階段,直接向語言模型注入這些精選的知識,以引導其產生更加符合實際語境的回答。

檢索增強產生主要分為三部分:

  • 文檔處理:使用者將上傳的文檔進行加密保護,在TDX執行個體中解密、分割和向量化,最後寫入資料庫。

  • 檢索:檢索模型從資料庫的大量文本中檢索與問題相關的文檔或段落,並依照相關性進行排名。

  • 產生:大語言模型根據提示詞和檢索到的文檔產生響應。

傳統RAG架構方案

傳統模式下,RAG架構存在多種安全威脅,包括落盤資料、前端查詢資料、資料庫、大語言模型等的安全威脅。構建和部署的RAG架構如下圖所示。

基於TDX環境部署的RAG架構方案

採用TDX執行個體部署的RAG架構如下圖:

方案構成

該架構主要分為雲上部署和線上問答兩部分,雲上部署主要分為以下兩部分。

  • 服務部署方(Service deployer)在阿里雲TDX執行個體中部署RAG服務,主要包括文檔分割模組、向量資料庫模組、排序模組、大語言模型模組、前端模組。

    • 文檔分割模組:對上傳文檔進行文本提取和分割等操作。

    • 向量資料庫模組:將文檔分割模組產生的格式化資料向量化並儲存在資料庫中,在該架構中採用Faiss + MySQL的方式實現。

    • 排序模組:將向量化之後的使用者問題和向量資料庫中的資料進行比較,輸出匹配度高的文本資訊給大模型。

    • 大語言模型模組:利用排序模組輸出的文本資訊,並結合特定提示詞,給出使用者最終的回答。

    • 前端模組:用於向使用者提供Q&A互動介面,接收使用者的提問,並將大語言模型模組產生的回答反饋給使用者。

  • 服務部署方將待分析的文檔上傳至資料庫。

方案優勢

該方案能夠解決傳統RAG架構中提到的安全威脅,包括:

  • 構建了基於TDX RA-TLS的通訊方案,在前端和後端之間建立了遠程認證,以保護使用者請求資訊。

  • 將RAG運行在Trust Domain VM中,保護了運行時安全。

  • 資料可以儲存在機密資料庫中,提供了全密態資料保護。

  • 通過LUKS實現資料落盤保護,保護了上傳的文檔資料及大語言模型的儲存安全。

方案安全保護

本方案主要在以下三個方面提供資料安全和隱私保護:

  • 記憶體加密:RAG前端和後端服務均運行在記憶體加密的TD環境中,防止惡意參與方竊取TD環境中程式運行時的資訊。

  • RA-TLS通訊:當RAG架構中的所有Docker鏡像不在同一台TDX執行個體中部署時,可以採用RA-TLS(Remote Attestation-TLS)通訊方案來驗證遠端通訊節點的身份,並保證網路傳輸過程中的資料安全。有關RA-TLS的詳細資料,請參見RA-TLS Enhanced gRPC

  • LUKS加密和OSS服務:通過使用LUKS加密技術和OSS服務,保護資料庫中的資料落盤,有效防止惡意參與方在資料落盤之後通過磁碟竊模數型資訊。

操作步驟

步驟一:建立TDX執行個體

  1. 前往執行個體建立頁

  2. 按照介面提示完成參數配置,建立一台ECS執行個體。

    需要注意的參數如下,其他參數的配置,請參見自訂購買執行個體

    • 執行個體:為了保證模型啟動並執行穩定,執行個體規格至少需要選擇ecs.g8i.4xlarge(64 GiB記憶體)。

    • 鏡像:選擇Alibaba Cloud Linux 3.2104 LTS 64位 UEFI版鏡像,並選中機密虛擬機器複選框。

      image

    • 公網IP:選中分配公網IPv4地址,頻寬計費模式選擇按使用流量,頻寬峰值設定為100 Mbps。以加快模型下載速度。

      image..png

    • 資料盤:建議資料盤設定為100 GiB。

    • 安全性群組:開通22、80、8502連接埠。

  3. 安裝Python 3.8。

    系統內建的Python版本為3.6,不滿足當前實踐的最低版本要求,因此需要安裝Python 3.8。

    1. 安裝Python 3.8軟體包。

      sudo yum install -y python38
    2. 設定Python 3.8為預設版本。

      sudo update-alternatives --config python

      運行過程中,請輸入4,選擇Python 3.8為預設版本。

      image.png

    3. 更新Python對應的pip版本。

      sudo python -m ensurepip --upgrade
      sudo python -m pip install --upgrade pip

步驟二:部署Docker鏡像

  1. 在已建立的TDX執行個體中安裝Docker。

    具體操作,請參見在Alibaba Cloud Linux 3中安裝Docker

  2. 下載CCZoo到ECS執行個體中。

    CCZoo基於Intel TEE(SGX&TDX)技術,提供了不同情境下各種典型端到端安全解決方案的參考案例,增加使用者在機密計算方案實現上的開發體驗,並引導使用者結合參考案例快速設計自己特定的機密計算解決方案。

    說明

    <workdir>請替換為實際的工作目錄,本文以/home/ecs-user為例。

    cd <workdir>
    git clone https://github.com/intel/confidential-computing-zoo.git
  3. 下載或編譯Docker鏡像。

    說明

    下載或編譯Docker鏡像時間較長,請耐心等待。

    • 從Docker Hub中下載Docker鏡像。

      sudo docker pull intelcczoo/tdx-rag:backend
      sudo docker pull intelcczoo/tdx-rag:frontend
    • 編譯Docker鏡像。

      cd confidential-computing-zoo/cczoo/rag
      ./build-images.sh

步驟三:建立加密分區

  1. 建立加密分區。

    建立加密目錄來儲存模型檔案及文檔數。

    cd confidential-computing-zoo/cczoo/rag/luks_tools
    sudo yum install -y cryptsetup
    VFS_SIZE=30G
    VIRTUAL_FS=/home/vfs
    sudo ./create_encrypted_vfs.sh ${VFS_SIZE} ${VIRTUAL_FS}
    1. 出現Are you sure? (Type 'yes' in capital letters): 時,請輸入YES

      image

    2. 出現Enter passphrase for /home/vfs:時,請輸入加密分區的密碼。image

      加密分區建立完成後,會輸出迴圈裝置號,如下圖的/dev/loop1

      image

  2. 建立LOOP_DEVICE環境變數來綁定迴圈裝置。

    <the binded loop device>請替換成上一步擷取的迴圈裝置號。

    export LOOP_DEVICE=<the binded loop device>
  3. 將塊迴圈裝置格式化為ext4。

    1. 建立/home/encrypted_storage並為目前使用者(以ecs-user為例)添加許可權。

      sudo mkdir /home/encrypted_storage
      sudo chown -R ecs-user:ecs-user /home/encrypted_storage/
    2. 將塊迴圈裝置格式化為ext4。

      ./mount_encrypted_vfs.sh ${LOOP_DEVICE} format

      出現Enter passphrase for /home/vfs: 時,請輸入步驟1.b中設定的密碼。

      image

      出現如下圖所示時,說明塊迴圈裝置已格式化完成。

      image

步驟四:下載資料與後端模型

    重要

    阿里雲不對第三方模型的合法性、安全性、準確性進行任何保證,阿里雲不對由此引發的任何損害承擔責任。

    您應自覺遵守第三方模型的使用者協議、使用規範和相關法律法規,並就使用第三方模型的合法性、合規性自行承擔相關責任。

預設情況下,資料與後端模型說明如下:

  • 文檔資料:<workdir>/confidential-computing-zoo/cczoo/rag/data/data.txt中的樣本內容。

  • 後端LLM:Llama-2-7b-chat-hf。

  • 排序模型:ms-marco-MiniLM-L-12-v2。

  • encoder模型:dpr-ctx_encoder-single-nq-base和dpr-question_encoder-single-nq-base。

本步驟介紹從魔搭社區及Hugging Face鏡像網站下載所需模型的步驟如下。如果您想使用其它模型,也可以參考以下步驟。

說明

您也可以從OSS服務中擷取自己已經上傳的模型或資料,更多資訊,請參見從OSS中下載檔案到本地

ossutil64 cp oss://<your dir>/<your file or your data> /home/encrypted_storage
  1. 切換到/home/encrypted_storage目錄。

    cd /home/encrypted_storage
  2. 安裝modelscope運行庫並設定環境變數。

    pip install modelscope
    export MODELSCOPE_CACHE=/home/encrypted_storage
  3. 下載Llama-2-7b-chat-hf模型。

    python3.8 -c "from modelscope import snapshot_download; model_dir = snapshot_download('shakechen/Llama-2-7b-chat-hf')"
    mv shakechen/Llama-2-7b-chat-hf Llama-2-7b-chat-hf
  4. 安裝huggingface_hub運行庫並設定環境變數。

    pip install -U huggingface_hub
    export HF_ENDPOINT=https://hf-mirror.com
  5. 下載預訓練模型(排序模型和encoder模型)。

    huggingface-cli download --resume-download --local-dir-use-symlinks False cross-encoder/ms-marco-MiniLM-L-12-v2 --local-dir ms-marco-MiniLM-L-12-v2
    huggingface-cli download --resume-download --local-dir-use-symlinks False facebook/dpr-ctx_encoder-single-nq-base --local-dir dpr-ctx_encoder-single-nq-base
    huggingface-cli download --resume-download --local-dir-use-symlinks False facebook/dpr-question_encoder-single-nq-base --local-dir dpr-question_encoder-single-nq-base

步驟五:啟動RAG服務

  1. 切換到rag目錄。

    cd <workdir>/confidential-computing-zoo/cczoo/rag
  2. 啟動資料庫服務容器。

    sudo ./run.sh db

    回顯類似如下所示時,表示資料庫服務容器已啟動。

    image

  3. 啟動後端服務容器。

    sudo ./run.sh backend

    在指令碼執行過程中,data.txt中的內容會被分割,並存放到資料庫中,並需要根據提示分別輸入資料庫IP地址(本機公網IP地址)、資料庫帳號(預設為root)、資料庫密碼(預設為123456)。

    如果需要對資料庫中的敏感性資料進行加密,請參見阿里雲全密態資料庫概述

    image

    出現類似如下圖所示時,表示後端服務容器已啟動。

    image

  4. 新建立一個會話終端,啟動前端服務容器。

    cd <workdir>/confidential-computing-zoo/cczoo/rag
    sudo ./run.sh frontend

    前端服務容器啟動成功後,可以看到類似以下內容的訊息。

    image

  5. 在本地瀏覽器中輸入External URL,即可進行AI對話。

    綠色提示框表示前端和後端之間建立了安全連線。關於RAG架構的定製化修改及問題,請參見Haystack

    image