随着大语言模型技术的普及,越来越多的企业开始尝试利用该技术来提升业务能力。因此,如何安全的管理模型及用户数据变得尤为重要,本文介绍基于异构机密计算实例构建支持安全度量大语言模型推理环境的最佳实践。
背景信息
阿里云异构机密计算实例(gn8v-tee)在CPU TDX机密计算实例的基础上,进一步将GPU引入到可信执行环境(TEE)中,以保护CPU和GPU之间的数据传输以及GPU内部的数据计算。本文介绍基于异构机密计算实例,将英特尔TDX的安全测量和远程认证功能集成到大规模语言模型(LLM)推理服务中的方案,从而为LLM服务构建强大的安全身份验证和隐私保护工作流程。该方案确保对模型及用户数据进行安全管理,进而在整个服务生命周期内维护其完整性,防止未经授权的访问。
上述方案遵循如下两个设计原则:
机密性:确保模型和用户数据仅在机密计算实例的机密安全边界内处理,并防止将明文暴露到外部环境中。
完整性:保证LLM推理服务环境中的所有组件(推理服务框架、模型文件、交互式界面等)的代码、数据和配置具有防篡改特性,同时支持严格的第三方审计验证流程。
技术架构
上述方案在阿里云上的整体技术架构如下所示。
关于上述架构中涉及的相关组件的说明如下。
客户端
终端用户访问大语言模型服务的交互界面(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)等。
工作流程
该方案的具体工作流程及说明如下。
服务启动及度量流程
运行环境度量:平台TCB模块针对运行模型服务的运行环境进行完整性度量,度量结果存储在位于TCB中的TDX Module中。
推理会话初始化阶段
新建会话:客户端(浏览器)向Open WebUI发起新的会话请求。
远程证明阶段
证明请求:客户端发起会话请求时,会向服务后端同时请求一个证明模型运行环境的可信性证明(TDX Quote),该证明可以用来验证远程服务环境的可信性,包含用户会话管理服务 Open WebUI和模型服务(Ollama + DeepSeek)的可信性。
证明产生:Open WebUI服务后端将用户会话创建过程中的证明请求转发至基于Intel TDX的机密虚拟机(Confidential VM)中,机密虚拟机会在其中基于CPU硬件生成包含完整证书链的TDX远程证明报告(TDX Quote)。
证明验证:客户端将接收到的证明(Quote)提交至远程证明服务(Attestation Service)进行验证。证明服务通过验证该次证明的有效性(包括数字签名、证书链及安全策略),返回证明结果,确认远端模型服务环境的安全性状态与完整性。
机密大模型推理服务阶段
远程证明成功:客户端可以充分信任远端模型服务,因为其运行在高度安全且可信的模式 下。这种保证意味着,对于终端用户而言,数据泄露的风险极低(尽管任何系统都存在一定程度的风险)。
远程证明失败:证明服务将返回错误信息,表明远程证明失败。在这种情况下,用户或者系统可以选择中止后续的服务请求,或者在收到存在安全风险的提示后继续提供服务。然而,此时远端模型服务可能会面临数据安全风险。
操作步骤
步骤一:创建异构机密计算实例
使用Ollama下载的模型数据将被保存至/usr/share/ollama/.ollama/models
目录。由于模型文件通常较大(以DeepSeek-R1 70b量化模型为例,模型文件大小约为40 GB),建议您在创建实例时综合考虑所需运行的模型大小,以选择合适的云盘容量。建议云盘容量为模型文件大小的2至3倍。
在控制台创建具备异构机密计算特性的实例步骤与创建普通实例类似,但需要注意一些特定选项。本步骤重点介绍异构机密计算实例相关的特定配置,如果您想了解其他通用配置,请参见自定义购买实例。
登录ECS管理控制台。
在左侧导航栏,选择 。
在页面左侧顶部,选择目标资源所在的资源组和地域。
单击创建实例,按照以下配置创建对应实例。
配置项
说明
地域与可用区
华北2(北京)可用区L
实例规格
仅支持ecs.gn8v-tee.4xlarge及以上实例规格。
镜像
选择Alibaba Cloud Linux 3.2104 LTS 64位镜像。
根据界面提示,完成创建实例。
您可以调用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_64的Alibaba 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。
导入阿里云机密计算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
安装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
配置阿里云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
运行如下命令,安装Ollama。
curl -fsSL https://ollama.com/install.sh | sh
上述脚本为Ollama官方提供的安装脚本,如果在安装过程中因网络问题导致安装失败,您可以参考Ollama官网,选择其他安装方式以完成Ollama的安装,具体操作,请参见ollama安装指南。
步骤四:通过Ollama下载并运行DeepSeek-R1
因模型文件较大,因此下载耗时较长,建议您使用tmux工具来保持会话,防止下载操作异常中断。
安装tmux工具。
运行如下命令,安装tmux工具。
sudo yum install -y tmux
通过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)
(条件可选)重新连接tmux会话。
如果您需要在网络连接断开后重新恢复tmux会话,请运行如下命令。
tmux attach -t run-deepseek
步骤五:编译Open WebUI
如需Open WebUI支持基于TDX的安全度量服务,您需要下载TDX安全度量插件,并基于Open WebUI源码手动编译Open WebUI,以使其支持基于TDX的安全度量服务。具体操作步骤如下。
下述示例中,以工作目录为/home/ecs-user
为例进行演示,实际使用中,请根据您的具体情况进行替换。
安装所需的依赖软件及环境
安装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
安装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"
初始化Conda并验证其版本信息。
运行如下命令,完成Conda初始化并验证其版本信息。
# 初始化 Conda conda init source ~/.bashrc # 验证版本信息 conda --version
手动编译Open WebUI。
下载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
拉取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
创建open-webui环境并激活。
运行如下命令,创建open-webui环境并激活,用于运行编译后的Open WebUI环境。
conda create --name open-webui python=3.11 conda activate open-webui
安装 "获取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"
编译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
文件中找到相关配置信息。配置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
安装Open WebUI运行所需的依赖库。
cd /home/ecs-user/open-webui/backend/ pip install -r requirements.txt -U conda deactivate
步骤六:运行Open WebUI并验证TDX认证信息
运行大模型,并启动Open WebUI服务。
(条件可选)如果Ollama服务未运行,您可以通过运行如下命令,启动Ollama服务。
ollama serve
运行如下命令,使用Ollama运行DeepSeek-R1模型。
ollama run deepseek-r1:70b
运行如下命令,激活open-webui虚拟环境。
conda activate open-webui
运行如下命令,启动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
通过浏览器访问Open WebUI服务。
添加安全组访问放行规则。
在您的异构机密计算实例的安全组中,添加允许客户端访问8080端口的规则。具体操作,请参见添加安全组规则。
通过浏览器访问Open WebUI服务。
打开本地浏览器访问如下地址:http://{ip_address}:{port},请根据具体情况替换对应的参数。
{ip_address}:Open WebUI所在实例的公网IP地址。
{port}:默认端口号为8080。
如果远程证明成功,对话框中的第一个图标上会出现绿色标记,如下图所示。否则标记显示为红色。
每次点击New Chat按钮后,后端服务会自动获取TDX 机密计算环境的Quote data发送至远程证明服务并返回认证结果。初始状态下,此图标显示红色。表示远程证明未完成或失败,远程证明成功后显示绿色。
验证TDX认证信息。
您可以将鼠标悬停在对话框中的第一个图标上,可以看到解析TDX Quote详细的认证信息。
您可以通过浏览器开发者工具查看详细信息,显示结果示例如下。
常见问题
相关文档
Open WebUI 原生设计仅支持HTTP协议,为了增加对数据安全传输,您可以借助阿里云CLB部署HTTPS认证,具体操作,请参见使用CLB部署HTTPS业务(单向认证)。
- 本页导读
- 背景信息
- 技术架构
- 工作流程
- 操作步骤
- 步骤一:创建异构机密计算实例
- 步骤二:构建TDX远程证明环境
- 步骤三:安装Ollama
- 步骤四:通过Ollama下载并运行DeepSeek-R1
- 步骤五:编译Open WebUI
- 步骤六:运行Open WebUI并验证TDX认证信息
- 常见问题
- pip安装软件时软件包下载速度慢
- 编译Open WebUI时,遇到Cannot find package报错
- 相关文档