Confidential AI 实践:基于 Anolis OS 部署 Intel TDX 保护的 Qwen 模型

简介: Confidential AI 最佳实践。

近期,龙蜥社区开源了 Confidential AI,为确保敏感 AI 模型和数据不被泄露提供了基于可信硬件和开源软件的解决方案框架。Confidential AI 方案让开发者能够在云端安全执行敏感 AI 任务:无需暴露原始数据/模型,借助可信硬件、远程证明等技术,实现在不信任环境中保护用户隐私数据和 AI 模型的全流程防护,同时正常调用云计算资源部署 AI 推理服务。


本文将你带你实现“基于 Confidential AI 方案部署受 Intel TDX 保护的隐私 Qwen-1.8B-Chat 模型”,步骤见下:

1.部署 Trustee,作为用户控制的、保存机密数据的组件;

2.下载 Qwen-1.8B-Chat,并加密模型文件,将该加密模型开放 web 访问,同时将加密密钥保存在 Trustee;

3.部署 Trustiflux(attestation-agent、confidential-data-hub),作为云端可信组件;

4.经过远程证明验证云端环境,从 Trustee 获取加密密钥,并经过 web 获取加密模型,将其解密后挂载在可信环境中;

5.基于 Qwen-1.8B-Chat 模型部署推理服务,并可选基于 TNG(trusted-network-gateway)实现信道安全增强。


根据 Confidential AI 方案的威胁模型,步骤 1、2 在用户侧发生,步骤 3、4、5 在云端发生。不过为了方便演示,本文展示的流程基于同一台 Intel® TDX 使能的平台,并且使用本地网络。


在开始部署前,需要准备环境:

一台 Intel® TDX 使能的实例,需要额外注意的参数如下:

  • 镜像:Anolis OS 23.2
  • 内存:Qwen-1.8B-Chat 大概需要 5 GiB 内存,为了保证模型运行流畅,实例规格至少 8 GiB 内存,推荐 16 GiB 内存
  • 硬盘:Qwen-1.8B-Chat 的运行需要下载多个模型文件,会占用部分存储空间,为了保证模型顺利运行,建议硬盘预留 40 GiB 空间
  • 网络:建议实例配置可访问的公网 IP 地址,若仅在单机运行,可使用本地回环地址


环境准备就绪后,接下来,带大家了解操作步骤:


步骤一:部署 Trustee

运行以下命令,安装 trustee 及相关环境依赖。

yum install -y anolis-epao-release && yum install -y trustee gocryptfs tmux git git-lfs wget && git lfs install


步骤二:模型数据准备

1.运行以下命令下载 Qwen-1.8B-Chat。(下载预训练模型预计耗时 15-20 分钟,且成功率受网络情况影响较大,建议在 tmux session 中下载,以免 TDX 实例断开连接导致下载模型中断)

# 下载预训练模型(预计耗时15-20分钟)
mkdir -p /tmp/trustee && cd /tmp/trustee && \
tmux new-session -d -s qwen_clone "git clone https://www.modelscope.cn/Qwen/Qwen-1_8B-Chat.git Qwen-1_8b-Chat --depth=1" && \
tmux attach -t qwen_clone


2.运行以下命令,用 gocryptfs 加密 Qwen-1_8b-Chat,得到加密模型文件和密钥文件。(加密时长约为5-10分钟)

mkdir -p /tmp/trustee/mount/{cipher,plain} && \
printf '123456' > /tmp/trustee/sample_password && \
cat /tmp/trustee/sample_password | gocryptfs -init /tmp/trustee/mount/cipher && \
(cat /tmp/trustee/sample_password | gocryptfs /tmp/trustee/mount/cipher /tmp/trustee/mount/plain &) && \
sleep 2 && \
mv /tmp/trustee/Qwen-1_8b-Chat/ /tmp/trustee/mount/plain && \
fusermount -u /tmp/trustee/mount/plain


3.运行以下命令,将密钥文件保存至 trustee,并设置远程证明 policy。

mkdir -p /opt/trustee/kbs/repository/cai/sample/ && \
mv /tmp/trustee/sample_password /opt/trustee/kbs/repository/cai/sample/password && \
cat > /opt/confidential-containers/attestation-service/token/simple/policies/opa/default.rego <<EOF
package policy
# WARNING: "allow_all.rego" can only be used in dev environment
default allow = true
EOF


4.运行以下命令,提供加密模型文件的web形式获取途径。(运行此命令后,会保持前台服务状态,需要退出请使用 Ctrl+C)

cd /tmp/trustee/mount/cipher && python3 -m http.server 9090 --bind 127.0.0.1


步骤三:部署 Trustiflux

打开一个新的终端,运行以下命令,安装 trustiflux(attestation-agent、confidential-data-hub)及相关环境依赖。

yum install -y anolis-epao-release && yum install -y attestation-agent confidential-data-hub gocryptfs wget


步骤四:验证环境并挂载模型数据

1.运行以下命令,验证当前的 Intel TDX 环境,并获取模型密钥。

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 && \
attestation-agent -c /etc/trustiflux/attestation-agent.toml > /dev/null 2>&1 & PID=$! && \
sed -i 's|\(url\s*=\s*"\)[^"]*|\1http://127.0.0.1:8080|' /etc/trustiflux/confidential-data-hub.toml && \
sleep 1 && password=$(confidential-data-hub -c /etc/trustiflux/confidential-data-hub.toml get-resource --resource-uri kbs:///cai/sample/password) && \
mkdir -p /dev/shm/trustiflux && echo "$password" | base64 -d > "/dev/shm/trustiflux/sample_password" && \
kill $PID


2.运行以下命令,获取加密模型,并用模型密钥解密。

wget -c --tries=30 --timeout=30 --waitretry=15 -r -np -nH -R "index.html*" --progress=dot:giga --show-progress --cut-dirs=0 -P /dev/shm/trustiflux/mount/cipher http://127.0.0.1:9090 && \
mkdir -p /dev/shm/trustiflux/mount/plain && \
gocryptfs -debug -passfile /dev/shm/trustiflux/sample_password /dev/shm/trustiflux/mount/cipher /dev/shm/trustiflux/mount/plain


步骤五:启动推理服务

1.运行以下命令,安装推理服务依赖,并启动推理服务环境。

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 && \
source $HOME/miniconda/bin/activate && \
conda create -n pytorch_env python=3.10 -y && \
conda activate pytorch_env


2.运行命令,在 web 页面或实例终端启动推理服务。

  • 启动方式一:Web 页面推理

a. 运行以下命令,启动 web 推理服务。

cd /dev/shm/trustiflux && \
git clone https://github.com/QwenLM/Qwen.git && \
cd /dev/shm/trustiflux/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 && \
python web_demo.py -c ../mount/plain/Qwen-1_8b-Chat --cpu-only --server-name 0.0.0.0 --server-port 7860


b. 在同网络内的其它机器打开浏览器,并在地址栏输入 http://<TDX 实例公网 IP 地址 >:7860,进入 Web 页面,即可开始对话。

  • 启动方式二:API 推理服务

a. 运行以下命令,启动 web 推理服务。

cd /dev/shm/trustiflux && \
git clone https://github.com/QwenLM/Qwen.git && \
cd /dev/shm/trustiflux/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-1_8b-Chat --cpu-only --server-name 0.0.0.0 --server-port 7860


b. 在 TDX 实例或同网络内的其它机器打开新的终端,输入下列命令即可成功调用推理服务 API。

# TDX 实例终端
curl -X POST http://127.0.0.1:7860/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
    "model": "Qwen",
    "messages": [
        {
            "role": "system",
            "content": "You are a helpful assistant."
        },
        {
            "role": "user", 
            "content": "你是谁?你能干什么呢?"
        }
    ]
}'
# 本地终端
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": "你是谁?你能干什么呢?"
        }
    ]
}'

  • 启动方式三:终端对话

a. 运行以下命令,启动终端推理服务。

cd /dev/shm/trustiflux && \
git clone https://github.com/QwenLM/Qwen.git && \
cd /dev/shm/trustiflux/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-1_8b-Chat --cpu-only


b. 启动后可以通过在 User> 提示符处输入对话内容,就可以与 Qwen-1_8b-Chat 大模型进行实时对话。


3.(可选)信道安全增强:对于 web 页面推理服务和 API 推理服务,你可以通过TNG,基于 Intel TDX 进一步保护你的 web 服务信道。

a. 在与 TDX 实例同网络内的其它实例打开新的终端,执行以下命令部署TNG(trusted-network-gateway)

yum install -y anolis-epao-release && \
yum install -y trusted-network-gateway && \
tng launch --config-content '{
  "add_egress": [
    {
      "netfilter": {
        "capture_dst": {
          "port": 7860
        },
        "capture_local_traffic": false,
        "listen_port": 40001
      },
      "attest": {
          "aa_addr": "unix:///run/confidential-containers/attestation-agent/attestation-agent.sock"
      }
    }
  ]
}'


b. 在本地部署 TNG(当前支持 Linux 和 Docker)。

  • Linux

下载对应架构的 TNG 可执行文件并解压。

# x86_64
wget https://github.com/inclavare-containers/TNG/releases/download/v2.2.1/tng-v2.2.1.x86_64-unknown-linux-gnu.tar.gz && \
tar -zxvf tng-v2.2.1.x86_64-unknown-linux-gnu.tar.gz && \
chmod +x tng
# aarch64
wget https://github.com/inclavare-containers/TNG/releases/download/v2.2.1/tng-v2.2.1.aarch64-unknown-linux-gnu.tar.gz && \
tar -zxvf tng-v2.2.1.aarch64-unknown-linux-gnu.tar.gz && \
chmod +x tng


执行以下命令,运行 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"]
    }
  }]
}'
  • Docker

执行以下命令,拉取并启动 TNG 容器。

docker run --rm --network=host \
  confidential-ai-registry.cn-shanghai.cr.aliyuncs.com/product/tng:2.2.1 \
  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"]
      }
    }]
  }'


c. 在本地浏览器地址栏输入 http://<TDX实例公网IP地址>:7860 并访问,即可基于 TNG 保护的信道开始与 Qwen-1.8B-Chat 模型对话。


常见问题

使用 pip3 安装依赖失败:

  • 问题现象:可能报错找不到符合要求的版本,或连接超时等。
  • 问题原因:通常是网络问题,导致依赖下载失败或无法访问。
  • 解决方法:可以通过使用国内镜像源加速下载来解决。例如使用阿里源下载:pip3 install -i https://mirrors.aliyun.com/pypi/simple/ your-packeage


龙蜥 Confidential AI 项目链接:https://github.com/openanolis/confidential-ai

相关文章
|
15天前
|
人工智能 搜索推荐 程序员
当AI学会“跨界思考”:多模态模型如何重塑人工智能
当AI学会“跨界思考”:多模态模型如何重塑人工智能
206 120
|
19天前
|
编解码 自然语言处理 文字识别
Qwen3-VL再添丁!4B/8B Dense模型开源,更轻量,仍强大
凌晨,Qwen3-VL系列再添新成员——Dense架构的Qwen3-VL-8B、Qwen3-VL-4B 模型,本地部署友好,并完整保留了Qwen3-VL的全部表现,评测指标表现优秀。
1025 7
Qwen3-VL再添丁!4B/8B Dense模型开源,更轻量,仍强大
|
13天前
|
缓存 物联网 PyTorch
使用TensorRT LLM构建和运行Qwen模型
本文档介绍如何在单GPU和单节点多GPU上使用TensorRT LLM构建和运行Qwen模型,涵盖模型转换、引擎构建、量化推理及LoRA微调等操作,并提供详细的代码示例与支持矩阵。
194 2
|
2月前
|
自然语言处理 机器人 图形学
腾讯混元图像3.0正式开源发布!80B,首个工业级原生多模态生图模型
腾讯混元图像3.0,真的来了——开源,免费开放使用。 正式介绍一下:混元图像3.0(HunyuanImage 3.0),是首个工业级原生多模态生图模型,参数规模80B,也是目前测评效果最好、参数量最大的开源生图模型,效果可对…
542 2
腾讯混元图像3.0正式开源发布!80B,首个工业级原生多模态生图模型
|
1月前
|
缓存 API 调度
70_大模型服务部署技术对比:从框架到推理引擎
在2025年的大模型生态中,高效的服务部署技术已成为连接模型能力与实际应用的关键桥梁。随着大模型参数规模的不断扩大和应用场景的日益复杂,如何在有限的硬件资源下实现高性能、低延迟的推理服务,成为了所有大模型应用开发者面临的核心挑战。
|
1月前
|
监控 安全 数据安全/隐私保护
55_大模型部署:从云端到边缘的全场景实践
随着大型语言模型(LLM)技术的飞速发展,从实验室走向产业化应用已成为必然趋势。2025年,大模型部署不再局限于传统的云端集中式架构,而是向云端-边缘协同的分布式部署模式演进。这种转变不仅解决了纯云端部署在延迟、隐私和成本方面的痛点,还为大模型在各行业的广泛应用开辟了新的可能性。本文将深入剖析大模型部署的核心技术、架构设计、工程实践及最新进展,为企业和开发者提供从云端到边缘的全场景部署指南。
|
1月前
|
存储 机器学习/深度学习 人工智能
54_模型优化:大模型的压缩与量化
随着大型语言模型(LLM)的快速发展,模型规模呈指数级增长,从最初的数亿参数到如今的数千亿甚至万亿参数。这种规模扩张带来了惊人的能源消耗和训练成本,同时也给部署和推理带来了巨大挑战。2025年,大模型的"瘦身"已成为行业发展的必然趋势。本文将深入剖析大模型压缩与量化的核心技术、最新进展及工程实践,探讨如何通过创新技术让大模型在保持高性能的同时实现轻量化部署,为企业和开发者提供全面的技术指导。
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
38_多模态模型:CLIP的视觉-语言对齐_深度解析
想象一下,当你看到一张小狗在草地上奔跑的图片时,你的大脑立刻就能将视觉信息与"小狗"、"草地"、"奔跑"等概念联系起来。这种跨模态的理解能力对于人类来说似乎是理所当然的,但对于人工智能系统而言,实现这种能力却经历了长期的技术挑战。多模态学习的出现,标志着AI从单一模态处理向更接近人类认知方式的综合信息处理迈出了关键一步。
|
1月前
|
人工智能 监控 安全
06_LLM安全与伦理:部署大模型的防护指南
随着大型语言模型(LLM)在各行业的广泛应用,其安全风险和伦理问题日益凸显。2025年,全球LLM市场规模已超过6400亿美元,年复合增长率达30.4%,但与之相伴的是安全威胁的复杂化和伦理挑战的多元化
|
3月前
|
Web App开发 缓存 Rust

推荐镜像

更多