基于异构机密计算实例构建支持安全度量的大语言模型推理环境

更新时间:2025-04-25 08:24:57

随着大语言模型技术的普及,越来越多的企业开始尝试利用该技术来提升业务能力。因此,如何安全的管理模型及用户数据变得尤为重要,本文介绍基于异构机密计算实例构建支持安全度量大语言模型推理环境的最佳实践。

背景信息

阿里云异构机密计算实例(gn8v-tee)在CPU TDX机密计算实例的基础上,进一步将GPU引入到可信执行环境(TEE)中,以保护CPUGPU之间的数据传输以及GPU内部的数据计算。本文介绍基于异构机密计算实例,将英特尔TDX的安全测量和远程认证功能集成到大规模语言模型(LLM)推理服务中的方案,从而为LLM服务构建强大的安全身份验证和隐私保护工作流程。该方案确保对模型及用户数据进行安全管理,进而在整个服务生命周期内维护其完整性,防止未经授权的访问。

上述方案遵循如下两个设计原则:

  • 机密性:确保模型和用户数据仅在机密计算实例的机密安全边界内处理,并防止将明文暴露到外部环境中。

  • 完整性:保证LLM推理服务环境中的所有组件(推理服务框架、模型文件、交互式界面等)的代码、数据和配置具有防篡改特性,同时支持严格的第三方审计验证流程。

方案的安全原理介绍

该方案中涉及到的安全原理包含可信度量和远程认证,关于这两种原理的介绍如下。

  • 可信度量

    Intel Trust Domain Extensions (TDX) 通过将虚拟机隔离在受硬件保护的信任域 (TDs, Trusted Domains) 中来增强虚拟机的安全性,在启动过程中,TDX 模块使用两个主要寄存器记录 TD 客户机的状态:

    • Build Time Measurement Register (MRTD):捕获与客户虚拟机的初始配置和启动镜像相关的测量值。

    • Runtime Measurement Registers (RTMR):根据需要记录初始状态、内核映像、命令行选项和其他运行时服务和参数的测量值。

    上述Measurement可确保 TD 和正在运行的应用程序在整个生命周期中的完整性。在本方案中,模型服务和内核参数的测量(包括与 Ollama 和 DeepSeek 模型以及Open WebUI框架相关的测量)可以反映在 RTMR 中。

  • 远程认证

    TDX 中的远程认证为远程方提供了TD机密虚拟机完整性和真实性的加密认证。该过程包括下述关键步骤:

    • TD Quote的获取:

      1. 客户端向Open WebUI请求提供完整的远程认证服务。

      2. Open WebUI后端获取受硬件签名保护的远程证明报告。该报告包括 MRTD 和 RTMR,反映正在运行的模型服务环境的当前完整性状态。这份签署的测量报告被称为Quote。

    • TD Quote的认证:客户端将Quote发送到受信任的证明服务,以根据预定义的策略进行验证,并在处理敏感信息之前与模型服务建立信任。

    说明

    关于阿里云远程证明服务的更多内容,请参见远程证明服务

通过集成可信度量和证明机制,可以为大语言模型推理服务构建了一个强大的安全框架,旨在验证远程模型服务的完整性和真实性,这对于数据安全与隐私的保护至关重要。

技术架构

上述方案在阿里云上的整体技术架构如下所示。

image

关于上述架构中涉及的相关组件的说明如下。

  • 客户端

    终端用户访问大语言模型服务的交互界面(UI),负责发起会话、验证远端模型服务环境可信性,并与后端模型服务进行安全通信。

  • 远程证明服务

    基于阿里云远程证明服务,用于验证模型推理服务环境的安全状态,包括平台可信计算基(TCB, Trusted Computing Base)以及推理模型服务环境。

  • 推理服务组件

    • Ollama:是一个处理模型推理服务请求的模型服务框架,本方案中使用的版本为v0.5.7

    • DeepSeek 模型:本方案中使用DeepSeek-R1-70B(int4 量化)蒸馏版模型。

    • Open WebUI:运行于机密虚拟机内部的 Web 交互接口,通过 RESTful API 接收用户模型服务请求,本方案中使用的版本为v0.5.20

    • CCZoo开源项目:本方案使用到的Confidential AI源码,本方案中使用的版本为v1.2。关于该开源项目的更多信息,请参见CCZoo

说明

Confidential Computing Zoo(CCZoo)是一组针对云计算业务场景的安全解决方案集合,旨在帮助开发者更轻松地构建自己的端到端机密计算解决方案。涉及的现代安全技术有(但不限于):TEE(可信执行环境,如 Intel® SGX 和 TDX)、HE(同态加密)及其硬件加速、远程认证、LibOS、加密及其硬件加速。涉及的业务场景包括(但不限于):云原生 AI 推理、联邦学习、大数据分析、密钥管理、RPC(Remote Process Call,如 gRPC)等。

工作流程

该方案的具体工作流程及说明如下。

image

  1. 服务启动及度量流程

    运行环境度量:平台TCB模块针对运行模型服务的运行环境进行完整性度量,度量结果存储在位于TCB中的TDX Module中。

  2. 推理会话初始化阶段

    新建会话:客户端(浏览器)向Open WebUI发起新的会话请求。

  3. 远程证明阶段

    1. 证明请求:客户端发起会话请求时,会向服务后端同时请求一个证明模型运行环境的可信性证明(TDX Quote),该证明可以用来验证远程服务环境的可信性,包含用户会话管理服务 Open WebUI和模型服务(Ollama + DeepSeek)的可信性。

    2. 证明产生:Open WebUI服务后端将用户会话创建过程中的证明请求转发至基于Intel TDX的机密虚拟机(Confidential VM)中,机密虚拟机会在其中基于CPU硬件生成包含完整证书链的TDX远程证明报告(TDX Quote)。

    3. 证明验证:客户端将接收到的证明(Quote)提交至远程证明服务(Attestation Service)进行验证。证明服务通过验证该次证明的有效性(包括数字签名、证书链及安全策略),返回证明结果,确认远端模型服务环境的安全性状态与完整性。

  4. 机密大模型推理服务阶段

    1. 远程证明成功:客户端可以充分信任远端模型服务,因为其运行在高度安全且可信的模式 下。这种保证意味着,对于终端用户而言,数据泄露的风险极低(尽管任何系统都存在一定程度的风险)。

    2. 远程证明失败:证明服务将返回错误信息,表明远程证明失败。在这种情况下,用户或者系统可以选择中止后续的服务请求,或者在收到存在安全风险的提示后继续提供服务。然而,此时远端模型服务可能会面临数据安全风险。

操作步骤

步骤一:创建异构机密计算实例

重要

使用Ollama下载的模型数据将被保存至/usr/share/ollama/.ollama/models目录。由于模型文件通常较大(以DeepSeek-R1 70b量化模型为例,模型文件大小约为40 GB),建议您在创建实例时综合考虑所需运行的模型大小,以选择合适的云盘容量。建议云盘容量为模型文件大小的23倍。

通过控制台创建
通过OpenAPI或阿里云CLI创建

在控制台创建具备异构机密计算特性的实例步骤与创建普通实例类似,但需要注意一些特定选项。本步骤重点介绍异构机密计算实例相关的特定配置,如果您想了解其他通用配置,请参见自定义购买实例

  1. 登录ECS管理控制台

  2. 在左侧导航栏,选择实例与镜像 > 实例

  3. 在页面左侧顶部,选择目标资源所在的资源组和地域。地域

  4. 单击创建实例,按照以下配置创建对应实例。

    配置项

    说明

    地域与可用区

    华北2(北京)可用区L

    实例规格

    仅支持ecs.gn8v-tee.4xlarge及以上实例规格。

    镜像

    选择Alibaba Cloud Linux 3.2104 LTS 64镜像。

  5. 根据界面提示,完成创建实例。

您可以调用RunInstances或阿里云CLI创建支持TDX安全特性的ECS实例,需要注意的参数如下表所示。

参数

说明

示例

RegionId

华北2(北京)

cn-beijing

ZoneId

可用区L

cn-beijing-l

InstanceType

选择ecs.gn8v-tee.4xlarge及以上实例规格

ecs.gn8v-tee.4xlarge

ImageId

指定支持异构机密的镜像ID,当前仅内核版本大于等于5.10.134-18.al8.x86_64Alibaba Cloud Linux 3.2104 LTS 64位镜像支持。

aliyun_3_x64_20G_alibase_20250117.vhd

CLI示例:

aliyun ecs RunInstances \
  --Region cn-beijing \
  --ZoneId cn-beijing-l \
  --SystemDisk.Category cloud_essd \
  --ImageId 'aliyun_3_x64_20G_alibase_20250117.vhd' \
  --InstanceType 'ecs.gn8v-tee.4xlarge' \
  --SecurityGroupId 'sg-[SecurityGroupId]' \
  --VSwitchId 'vsw-[VSwitchID]' \
  --KeyPairName [KEY_PAIR_NAME] \

步骤二:构建TDX远程证明环境

TDX Report是由CPU硬件直接生成的代表了TDX实例身份的数据结构,其包含了TDX实例的属性(ATTRIBUTES)动态度量值(RTMR)TCB SVN等关键信息,并以密码学方法保护其完整性。更多信息,请参见Intel TDX Module

  1. 导入阿里云机密计算yum软件源。

    • 公网地址格式:https://enclave-[Region-ID].oss-[Region-ID].aliyuncs.com/repo/alinux/enclave-expr.repo

    • VPC内网地址格式:https://enclave-[Region-ID].oss-[Region-ID]-internal.aliyuncs.com/repo/alinux/enclave-expr.repo

      请将上述地址中的[Region-ID]替换为TDX实例所在地域的ID。当前仅支持在华北2(北京)地域创建TDX实例,华北2(北京)地域中的VPC内网导入示例:

      region="cn-beijing"
      
      sudo yum install -y yum-utils
      sudo yum-config-manager --add-repo https://enclave-${region}.oss-${region}-internal.aliyuncs.com/repo/alinux/enclave-expr.repo
  2. 安装TDX远程证明所需依赖的包。

    sudo yum install -y gcc gcc-c++ make openssl-devel git jq
    sudo yum install -y tdx-quote-generation-sample tee-appraisal-tool libsgx-dcap-ql-devel libsgx-dcap-quote-verify-devel libsgx-dcap-default-qpl-devel tdx-quote-verification-sample
  3. 配置阿里云TDX远程证明服务。

    配置/etc/sgx_default_qcnl.conf文件中的PCCS_URL,当前仅支持将PCCS_URL指向阿里云华北2(北京)的DCAP服务。

    sudo sed -i.$(date "+%m%d%y") 's|PCCS_URL=.*|PCCS_URL=https://sgx-dcap-server.cn-beijing.aliyuncs.com/sgx/certification/v4/|' /etc/sgx_default_qcnl.conf

步骤三:安装Ollama

  1. 使用Workbench工具以SSH协议登录Linux实例

  2. 运行如下命令,安装Ollama。

    curl -fsSL https://ollama.com/install.sh | sh
    说明

    上述脚本为Ollama官方提供的安装脚本,如果在安装过程中因网络问题导致安装失败,您可以参考Ollama官网,选择其他安装方式以完成Ollama的安装,具体操作,请参见ollama安装指南

步骤四:通过Ollama下载并运行DeepSeek-R1

因模型文件较大,因此下载耗时较长,建议您使用tmux工具来保持会话,防止下载操作异常中断。

  1. 安装tmux工具。

    运行如下命令,安装tmux工具。

    sudo yum install -y tmux
  2. 通过Ollama下载并运行DeepSeek-R1。

    运行如下命令,创建一个tmux会话,并在tmux会话中通过Ollama下载运行DeepSeek-R1模型。

    # 为tmux创建一个名称为run-deepseek的会话
    tmux new -s "run-deepseek"
    # 在tmux会话中下载并运行deepseek-r1模型
    ollama run deepseek-r1:70b

    回显信息示例如下,表明模型下载完成并启动成功,您可以输入/bye以退出模型交互流程。

    ......
    verifying sha256 digest 
    writing manifest 
    success 
    >>> 
    >>> Send a message (/? for help)
  3. (条件可选)重新连接tmux会话。

    如果您需要在网络连接断开后重新恢复tmux会话,请运行如下命令。

    tmux attach -t run-deepseek

步骤五:编译Open WebUI

如需Open WebUI支持基于TDX的安全度量服务,您需要下载TDX安全度量插件,并基于Open WebUI源码手动编译Open WebUI,以使其支持基于TDX的安全度量服务。具体操作步骤如下。

重要

下述示例中,以工作目录为/home/ecs-user为例进行演示,实际使用中,请根据您的具体情况进行替换。

  1. 安装所需的依赖软件及环境

    1. 安装Node.js。

      运行如下命令,安装Node.js。

      sudo yum install -y nodejs
      说明

      如果使用包管理器安装nodejs出现问题,可以尝试先安装npm模块管理器,并使用npm安装nodejs指定版本。

      # 安装npm模块管理器
      sudo yum install -y npm
      # 使用npm安装nodejs指定版本
      sudo npm install 20.18.1
    2. 安装Miniforge 3并配置其环境变量。

      运行如下命令,安装Miniforge 3,并配置其环境变量,以便管理open-webui虚拟环境。

      # 获取Miniforge3安装包
      wget https://github.com/conda-forge/miniforge/releases/download/24.11.3-2/Miniforge3-24.11.3-2-Linux-x86_64.sh
      # 使用非交互式方式安装miniforge3至/home/ecs-user/miniforge3目录
      bash Miniforge3-24.11.3-2-Linux-x86_64.sh -bu -p /home/ecs-user/miniforge3
      # 设置Miniforge3的环境变量
      export PATH="/home/ecs-user/miniforge3/bin:$PATH"
    3. 初始化Conda并验证其版本信息。

      运行如下命令,完成Conda初始化并验证其版本信息。

      # 初始化 Conda
      conda init
      source ~/.bashrc
      
      # 验证版本信息
      conda --version
  2. 手动编译Open WebUI。

    1. 下载TDX安全度量插件。

      运行如下命令,下载TDX安全度量插件并切换至v1.2分支。

      cd /home/ecs-user
      git clone https://github.com/intel/confidential-computing-zoo.git
      git config --global --add safe.directory /home/ecs-user/confidential-computing-zoo
      cd confidential-computing-zoo
      git checkout v1.2
    2. 拉取Open WebUI源码。

      运行如下命令,拉取Open WebUI源码并切换至v0.5.20分支。

      cd /home/ecs-user
      git clone https://github.com/open-webui/open-webui.git
      
      # 切换至tag:v0.5.20分支
      git config --global --add safe.directory /home/ecs-user/open-webui
      cd /home/ecs-user/open-webui
      git checkout v0.5.20
      
      # 合入CCZoo提供的patch,该patch增加了open-webui对TDX远程认证相关的功能
      cd /home/ecs-user
      cp /home/ecs-user/confidential-computing-zoo/cczoo/confidential_ai/open-webui-patch/v0.5.20-feature-cc-tdx-v1.0.patch .
      git apply --ignore-whitespace --directory=open-webui/ v0.5.20-feature-cc-tdx-v1.0.patch
    3. 创建open-webui环境并激活。

      运行如下命令,创建open-webui环境并激活,用于运行编译后的Open WebUI环境。

      conda create --name open-webui python=3.11
      conda activate open-webui
    4. 安装 "获取TDX Quote" 插件。

      cd /home/ecs-user/confidential-computing-zoo/cczoo/confidential_ai/tdx_measurement_plugin/
      pip install Cython
      python setup.py install

      上述命令执行完成后,运行如下命令,验证安装是否正常。回显信息无报错,表明安装成功。

      python3 -c "import quote_generator"
    5. 编译Open WebUI。

      # 安装依赖
      cd /home/ecs-user/open-webui/
      # 配置npm源
      npm config set registry http://registry.npmmirror.com
      sudo npm install
      # 编译
      sudo npm run build

      编译完成后,运行如下命令,复制生成的build文件夹至backend目录并重命名为frontend。

      rm -rf ./backend/open_webui/frontend
      cp -r build ./backend/open_webui/frontend
      说明

      此时,阿里云远程证明服务已成功配置在编译好的Open WebUI中。您可以在/home/ecs-user/open-webui/external/acs-attest-client/index.js文件中找到相关配置信息。

    6. 配置Open WebUI后端服务启动文件。

      运行如下命令,为Open WebUI后端服务配置启动文件,并为其添加可执行权限。

      tee /home/ecs-user/open-webui/backend/dev.sh << 'EOF'
      #设置服务地址端口,默认端口为 8080
      PORT="${PORT:-8080}"
      uvicorn open_webui.main:app --port $PORT --host 0.0.0.0 --forwarded-allow-ips '*' --reload
      EOF
      
      # 为启动文件添加可执行权限
      chmod +x /home/ecs-user/open-webui/backend/dev.sh
    7. 安装Open WebUI运行所需的依赖库。

      cd /home/ecs-user/open-webui/backend/
      pip install -r requirements.txt -U
      conda deactivate

步骤六:运行Open WebUI并验证TDX认证信息

  1. 运行大模型,并启动Open WebUI服务。

    1. (条件可选)如果Ollama服务未运行,您可以通过运行如下命令,启动Ollama服务。

      ollama serve
    2. 运行如下命令,使用Ollama运行DeepSeek-R1模型。

      ollama run deepseek-r1:70b
    3. 运行如下命令,激活open-webui虚拟环境。

      conda activate open-webui
    4. 运行如下命令,启动Open WebUI后端服务。

      cd /home/ecs-user/open-webui/backend && ./dev.sh

      回显信息示例如下,表明Open WebUI后端服务启动成功。

      ......
      INFO  [open_webui.env] Embedding model set: sentence-transformers/all-MiniLM-L6-v2
      /root/miniforge3/envs/open-webui/lib/python3.12/site-packages/pydub/utils.py:170: RuntimeWarning: Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work
        warn("Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work", RuntimeWarning)
      WARNI [langchain_community.utils.user_agent] USER_AGENT environment variable not set, consider setting it to identify your requests.
      
       ██████╗ ██████╗ ███████╗███╗   ██╗    ██╗    ██╗███████╗██████╗ ██╗   ██╗██╗
      ██╔═══██╗██╔══██╗██╔════╝████╗  ██║    ██║    ██║██╔════╝██╔══██╗██║   ██║██║
      ██║   ██║██████╔╝█████╗  ██╔██╗ ██║    ██║ █╗ ██║█████╗  ██████╔╝██║   ██║██║
      ██║   ██║██╔═══╝ ██╔══╝  ██║╚██╗██║    ██║███╗██║██╔══╝  ██╔══██╗██║   ██║██║
      ╚██████╔╝██║     ███████╗██║ ╚████║    ╚███╔███╔╝███████╗██████╔╝╚██████╔╝██║
       ��═════╝ ╚═╝     ╚══════╝╚═╝  ╚═══╝     ╚══╝╚══╝ ╚══════╝╚═════╝  ╚═════╝ ╚═╝
      
      
      v0.5.20 - building the best open-source AI user interface.
      
      https://github.com/open-webui/open-webui
  2. 通过浏览器访问Open WebUI服务。

    1. 添加安全组访问放行规则。

      在您的异构机密计算实例的安全组中,添加允许客户端访问8080端口的规则。具体操作,请参见添加安全组规则

    2. 通过浏览器访问Open WebUI服务。

      打开本地浏览器访问如下地址:http://{ip_address}:{port},请根据具体情况替换对应的参数。

      • {ip_address}:Open WebUI所在实例的公网IP地址。

      • {port}:默认端口号为8080。

      如果远程证明成功,对话框中的第一个图标上会出现绿色标记,如下图所示。否则标记显示为红色。

      image

      说明

      每次点击New Chat按钮后,后端服务会自动获取TDX 机密计算环境的Quote data发送至远程证明服务并返回认证结果。初始状态下,此图标显示红色。表示远程证明未完成或失败,远程证明成功后显示绿色。

  3. 验证TDX认证信息。

    您可以将鼠标悬停在对话框中的第一个图标上,可以看到解析TDX Quote详细的认证信息。

    image

    您可以通过浏览器开发者工具查看详细信息,显示结果示例如下。

    image

常见问题

pip安装软件时软件包下载速度慢

  • 问题现象:使用pip安装软件包时软件包下载速度较慢,或者下载失败。

  • 问题原因:访问pip官方的软件源网络不稳定。

  • 解决方案:您可以参考如下方案,使用阿里云的镜像加速来解决该问题。

    全局使用加速(推荐)
    单次安装使用加速

    将如下内容添加至您的~/.pip/pip.conf文件。

    [global]
    index-url = https://mirrors.aliyun.com/pypi/simple/

    执行pip install 命令时,可通过增加-i参数指定软件源地址以加速安装。下述示例中,以安装torch软件包为例进行演示,请根据具体情况进行替换。

    pip install torch -i https://mirrors.aliyun.com/pypi/simple/

编译Open WebUI时,遇到Cannot find package报错

  • 问题现象:编译Open WebUI时,遇到Cannot find package 报错。

  • 问题原因:编译环境缺少对应的软件包。

  • 解决方案:您需要使用npm安装缺省的软件包后重新进行编译。下述示例中,以安装pyodide软件包为例进行演示,请根据具体情况进行替换。

    npm install pyodide

相关文档

Open WebUI 原生设计仅支持HTTP协议,为了增加对数据安全传输,您可以借助阿里云CLB部署HTTPS认证,具体操作,请参见使用CLB部署HTTPS业务(单向认证)

  • 本页导读
  • 背景信息
  • 技术架构
  • 工作流程
  • 操作步骤
  • 步骤一:创建异构机密计算实例
  • 步骤二:构建TDX远程证明环境
  • 步骤三:安装Ollama
  • 步骤四:通过Ollama下载并运行DeepSeek-R1
  • 步骤五:编译Open WebUI
  • 步骤六:运行Open WebUI并验证TDX认证信息
  • 常见问题
  • pip安装软件时软件包下载速度慢
  • 编译Open WebUI时,遇到Cannot find package报错
  • 相关文档
AI助理

点击开启售前

在线咨询服务

你好,我是AI助理

可以解答问题、推荐解决方案等