大規模言語モデル (LLM) の普及に伴い、多くの企業がビジネス能力向上のためにこの技術を導入しています。その結果、モデルとユーザーデータの安全な管理が極めて重要になっています。このドキュメントでは、ヘテロジニアスコンフィデンシャルコンピューティングインスタンス上にメジャーメント対応の LLM 推論環境を構築する方法について説明します。
背景情報
Alibaba Cloud のヘテロジニアスコンフィデンシャルコンピューティングインスタンス (gn8v-tee) は、GPU を高信頼実行環境 (TEE) に統合することで、CPU ベースの TDX コンフィデンシャルコンピューティングの機能を拡張します。この統合により、CPU と GPU 間で転送されるデータ、および GPU 内で処理されるデータが保護されます。このドキュメントでは、Intel TDX のセキュリティメジャーメントとリモートアテステーション機能を LLM 推論サービスに統合するソリューションを提供します。このアプローチは、LLM サービスのための堅牢なセキュリティとプライバシーのワークフローを確立し、不正アクセスを防ぐことで、サービスライフサイクル全体にわたってモデルとユーザーデータのセキュリティと完全性を保証します。
このソリューションは、2 つの主要な設計原則に基づいています。
機密性:モデルとユーザーデータがインスタンスの機密セキュリティ境界内でのみ処理されることを保証し、プレーンテキストデータが外部に公開されるのを防ぎます。
完全性:推論フレームワーク、モデルファイル、対話型インターフェイスなど、LLM 推論サービス環境内のすべてのコンポーネントが改ざん防止であることを保証します。また、厳格な第三者による監査と検証プロセスもサポートします。
技術アーキテクチャ
以下の図は、Alibaba Cloud 上でのこのソリューションの全体的な技術アーキテクチャを示しています。
このアーキテクチャのコンポーネントは以下の通りです。
クライアント
エンドユーザーが LLM サービスにアクセスするためのユーザーインターフェース (UI) です。クライアントはセッションを開始し、リモートサービスの信頼性を検証し、バックエンドと安全に通信します。
リモートアテステーションサービス
Alibaba Cloud リモートアテステーションサービスに基づいて、このコンポーネントはモデル推論サービス環境のセキュリティ状態を検証します。これには、プラットフォームの高信頼コンピューティングベース (TCB) と推論モデルサービス環境自体が含まれます。
推論サービスコンポーネント
Ollama:推論サービスリクエストを処理するモデルサービスフレームワークです。このソリューションでは、バージョン
v0.5.7を使用します。DeepSeek モデル:このソリューションでは、DeepSeek-R1-70B の蒸留版 (int4 量子化) を使用します。
Open WebUI:コンフィデンシャル VM 内で実行され、RESTful API を介してユーザーのモデルサービスリクエストを受け取る Web ベースの対話型インターフェイスです。このソリューションでは、バージョン
v0.5.20を使用します。CCZoo オープンソースプロジェクト:このソリューションでは、このプロジェクトの Confidential AI ソースコード、具体的にはバージョン
v1.2を使用します。このプロジェクトの詳細については、「CCZoo」をご参照ください。
Confidential Computing Zoo (CCZoo) は、クラウドコンピューティングシナリオ向けのセキュリティソリューションのコレクションであり、開発者が独自のエンドツーエンドのコンフィデンシャルコンピューティングソリューションをより簡単に構築できるように設計されています。そのセキュリティ技術には、Intel® SGX や TDX などの高信頼実行環境 (TEE)、準同型暗号 (HE) とそのハードウェアアクセラレーション、リモートアテステーション、LibOS、およびハードウェアアクセラレーション付きの暗号技術が含まれます。そのビジネスシナリオは、クラウドネイティブ AI 推論、連合学習、ビッグデータ分析、キー管理、および gRPC などのリモートプロシージャコール (RPC) をカバーしています。
ワークフロー
このソリューションの具体的なワークフローは以下の通りです。

サービスの起動とメジャーメント
プラットフォームの TCB モジュールは、モデルサービスのランタイム環境の完全性メジャーメントを実行します。メジャーメント結果は、TCB 内にある TDX モジュールに保存されます。
推論セッションの初期化
クライアント (ブラウザ) は Open WebUI に新しいセッションリクエストを開始します。
リモートアテステーション
アテステーションリクエスト:クライアントがセッションを開始すると、TDX Quote もリクエストします。この Quote は、モデルのランタイム環境の信頼性の証明として機能し、ユーザーセッション管理サービス (Open WebUI) やモデルサービス (Ollama + DeepSeek) を含むリモートサービス環境を検証するために使用されます。
Quote の生成:Open WebUI バックエンドは、アテステーションリクエストを Intel TDX ベースのコンフィデンシャル VM に転送します。VM 内で、完全な証明書チェーンを含む TDX Quote が CPU ハードウェアによって生成されます。
Quote の検証:クライアントは受信した Quote をリモートアテステーションサービスに送信して検証します。サービスは、デジタル署名、証明書チェーン、およびセキュリティポリシーをチェックして Quote の真正性を検証します。その後、リモートモデルサービス環境のセキュリティと完全性を確認する結果を返します。
コンフィデンシャル LLM 推論サービス
アテステーション成功:クライアントは、リモートモデルサービスが非常に安全で信頼されたモードで実行されているため、完全に信頼できます。この保証は、どのシステムも完全にリスクフリーではないものの、エンドユーザーがデータ漏洩のリスクにさらされる可能性が極めて低いことを意味します。
アテステーション失敗:アテステーションサービスはエラーを返し、リモートアテステーションが失敗したことを示します。ユーザーまたはシステムは、後続のサービスリクエストを中止することを選択できます。あるいは、潜在的なセキュリティリスクに関する警告が発行された後、サービスを続行することもできます。ただし、リモートモデルサービスはデータセキュリティリスクにさらされる可能性があります。
操作手順
ステップ 1:ヘテロジニアスコンフィデンシャルコンピューティングインスタンスの作成
Ollama によってダウンロードされたモデルデータは /usr/share/ollama/.ollama/models ディレクトリに保存されます。モデルファイルは通常サイズが大きいため (例えば、DeepSeek-R1 70b 量子化モデルは約 40 GB)、インスタンスを作成する際には実行予定のモデルのサイズを考慮し、適切なクラウドディスク容量を選択してください。モデルファイルのサイズの 2〜3 倍の容量を推奨します。
ECS コンソール
コンソールでヘテロジニアスコンフィデンシャルコンピューティング機能を備えたインスタンスを作成する手順は、通常のインスタンスの作成と似ていますが、特定のオプションを選択する必要があります。このセクションでは、ヘテロジニアスコンフィデンシャルコンピューティングインスタンスの特定の構成に焦点を当てます。その他の一般的な構成については、「ウィザードを使用したインスタンスの作成」をご参照ください。
ECS コンソール - インスタンスに移動します。
トップナビゲーションバーで、管理したいリソースのリージョンとリソースグループを選択します。
[インスタンスの作成] をクリックし、以下の設定でインスタンスを構成します。
構成項目
説明
リージョンとゾーン
中国 (北京) ゾーン L
インスタンスタイプ
ecs.gn8v-tee.4xlarge 以上のインスタンスタイプのみがサポートされています。
イメージ
[Alibaba Cloud Linux 3.2104 LTS 64 ビット] イメージを選択します。
パブリック IP アドレス
[パブリック IPv4 アドレスの割り当て] を選択します。これにより、後で公式 NVIDIA ウェブサイトからドライバーをダウンロードできるようになります。
重要8-GPU のコンフィデンシャルインスタンスを作成する際、追加のセカンダリ Elastic Network Interface (ENI) を追加しないでください。追加すると、インスタンスが起動しない可能性があります。
画面の指示に従ってインスタンスの作成を完了します。
OpenAPI または CLI
TDX セキュリティ属性をサポートする ECS インスタンスを作成するには、RunInstances 操作を呼び出すか、Alibaba Cloud CLI を使用します。以下の表に、必須パラメーターを示します。
パラメーター | 説明 | 例 |
RegionId | 中国 (北京) | 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 以降の 64 ビット Alibaba Cloud Linux 3.2104 LTS イメージのみがサポートされています。 | aliyun_3_x64_20G_alibase_20250117.vhd |
CLI の例:
コマンド内の<SECURITY_GROUP_ID>はセキュリティグループ ID、<VSWITCH_ID>は vSwitch ID、<KEY_PAIR_NAME>は SSH キーペア名を表します。
aliyun ecs RunInstances \
--RegionId cn-beijing \
--ZoneId cn-beijing-l \
--SystemDisk.Category cloud_essd \
--ImageId 'aliyun_3_x64_20G_alibase_20250117.vhd' \
--InstanceType 'ecs.gn8v-tee.4xlarge' \
--SecurityGroupId '<SECURITY_GROUP_ID>' \
--VSwitchId '<VSWITCH_ID>' \
--KeyPairName <KEY_PAIR_NAME>ステップ 2:TDX リモートアテステーション環境の構築
TDX Report は、TDX 対応インスタンスの ID を表すために CPU ハードウェアによって生成されるデータ構造です。TDX Report には、属性 (ATTRIBUTES)、ランタイム拡張可能メジャーメントレジスタ (RTMR)、高信頼コンピューティングベース (TCB) セキュリティバージョン番号 (SVN) など、TDX 対応インスタンスに関する重要な情報が含まれています。TDX Report は、暗号化手法を使用して情報の完全性を保証します。詳細については、「Intel TDX Module」をご参照ください。
Alibaba Cloud コンフィデンシャルコンピューティング用の YUM ソフトウェアリポジトリをインポートします。
YUM ソフトウェアリポジトリのパブリック URL は次の形式です:
https://enclave-[Region-ID].oss-[Region-ID].aliyuncs.com/repo/alinux/enclave-expr.repo。YUM ソフトウェアリポジトリの内部 URL は次の形式です:
https://enclave-[Region-ID].oss-[Region-ID]-internal.aliyuncs.com/repo/alinux/enclave-expr.repo。
上記の URL の [Region-ID] を TDX 対応インスタンスの実際のリージョン ID に置き換えてください。TDX 対応インスタンスは中国 (北京) リージョンでのみ作成できます。中国 (北京) リージョンに固有の内部 URL から YUM ソフトウェアリポジトリをインポートするには、次のコマンドを実行します。
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コンパイルツールとサンプルコードをインストールします。
sudo yum groupinstall -y "Development Tools" sudo yum install -y sgxsdk libtdx-attest-develAlibaba Cloud TDX リモートアテステーションサービスを構成します。
/etc/sgx_default_qcnl.confファイル内のPCCS_URLパラメーターを指定します。PCCS_URL パラメーターは、中国 (北京) リージョンの Distributed Cooperative Access Points (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
ステップ 3:Ollama のインストール
次のコマンドを実行して Ollama をインストールします。
curl -fsSL https://ollama.com/install.sh | sh説明上記のスクリプトは Ollama が提供する公式インストールスクリプトです。ネットワークの問題でインストールが失敗した場合は、Ollama の公式ウェブサイトを参照し、別のインストール方法を選択してください。詳細については、「Ollama インストールガイド」をご参照ください。
ステップ 4:Ollama を使用した DeepSeek-R1 のダウンロードと実行
モデルファイルはサイズが大きく、ダウンロードに時間がかかる可能性があるため、tmux ツールを使用してセッションを維持し、ダウンロードの中断を防ぎます。
tmux ツールのインストール
次のコマンドを実行して
tmuxをインストールします。sudo yum install -y tmuxOllama を使用した DeepSeek-R1 のダウンロードと実行
次のコマンドを実行して
tmuxセッションを作成し、そのセッション内で DeepSeek-R1 モデルをダウンロードして実行します。# run-deepseek という名前の tmux セッションを作成 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
ステップ 5:Open WebUI のコンパイル
Open WebUI で TDX セキュリティメジャーメントを有効にするには、TDX プラグインをダウンロードし、ソースから Open WebUI をコンパイルします。
以下の例では、作業ディレクトリとして /home/ecs-user を使用しています。実際の作業ディレクトリに置き換えてください。
必要な依存関係と環境のインストール
Node.js のインストール
次のコマンドを実行して Node.js をインストールします。
sudo yum install -y nodejs説明パッケージマネージャで Node.js のインストールに問題が発生した場合は、nvm (Node Version Manager) を使用して特定のバージョンの Node.js をインストールしてみてください。
# nvm をダウンロードしてインストール curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash # nvm 環境変数を読み込む source ~/.bashrc # Node.js バージョン 20.18.1 をインストール nvm install 20.18.1 # このバージョンを使用 nvm use 20.18.1 # バージョンを確認 node --versionMiniforge3 のインストールと環境変数の設定
次のコマンドを実行して Miniforge3 をインストールし、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.2Open 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 が提供するパッチをマージ。これにより、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.patchopen-webui 環境の作成とアクティベート
次のコマンドを実行して、コンパイルされた Open WebUI を実行するために使用される
open-webui環境を作成し、アクティベートします。conda create --name open-webui python=3.11 conda activate open-webui「Get 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説明この時点で、Alibaba Cloud リモートアテステーションサービスはコンパイルされた 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.shOpen WebUI の実行に必要な依存関係のインストール
cd /home/ecs-user/open-webui/backend/ pip install -r requirements.txt -U conda deactivate
ステップ 6:Open WebUI の実行と TDX アテステーション情報の検証
LLM の実行と Open WebUI サービスの開始
(オプション) 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] 埋め込みモデルセット: sentence-transformers/all-MiniLM-L6-v2 /root/miniforge3/envs/open-webui/lib/python3.12/site-packages/pydub/utils.py:170: RuntimeWarning: ffmpeg または avconv が見つかりませんでした - デフォルトで ffmpeg を使用しますが、動作しない可能性があります warn("Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work", RuntimeWarning) WARNI [langchain_community.utils.user_agent] USER_AGENT 環境変数が設定されていません。リクエストを識別するために設定を検討してください。 ██████╗ ██████╗ ███████╗███╗ ██╗ ██╗ ██╗███████╗██████╗ ██╗ ██╗██╗ ██╔═══██╗██╔══██╗██╔════╝████╗ ██║ ██║ ██║██╔════╝██╔══██╗██║ ██║██║ ██║ ██║██████╔╝█████╗ ██╔██╗ ██║ ██║ █╗ ██║█████╗ ██████╔╝██║ ██║██║ ██║ ██║██╔═══╝ ██╔══╝ ██║╚██╗██║ ██║███╗██║██╔══╝ ██╔══██╗██║ ██║██║ ╚██████╔╝██║ ███████╗██║ ╚████║ ╚███╔███╔╝███████╗██████╔╝╚██████╔╝██║ ═════╝ ╚═╝ ╚══════╝╚═╝ ╚═══╝ ╚══╝╚══╝ ╚══════╝╚═════╝ ╚═════╝ ╚═╝ v0.5.20 - 最高のオープンソース AI ユーザーインターフェースを構築 https://github.com/open-webui/open-webui
ブラウザから Open WebUI サービスへのアクセス
セキュリティグループルールの追加
ヘテロジニアスコンフィデンシャルコンピューティングインスタンスのセキュリティグループで、クライアントがポート 8080 にアクセスできるようにするルールを追加します。詳細な手順については、「セキュリティグループルールの追加」をご参照ください。
ブラウザから Open WebUI サービスへのアクセス
ローカルのブラウザを開き、次のアドレスに移動します:
http://{ip_address}:{port}。パラメーターを特定の値に置き換えてください。{ip_address}:Open WebUI が実行されているインスタンスのパブリック IP アドレス。
{port}:デフォルトのポート番号は 8080 です。
リモートアテステーションが成功すると、下の図に示すように、ダイアログボックスの最初のアイコンに緑色のチェックマークが表示されます。それ以外の場合、アイコンは赤色になります。
説明[新しいチャット] をクリックするたびに、バックエンドは TDX 環境の Quote をフェッチし、リモートアテステーションに送信して結果を表示します。アイコンはデフォルトで赤色 (アテステーション未完了または失敗) で、アテステーションが成功すると緑色に変わります。
TDX アテステーション情報の検証
ダイアログボックスの最初のアイコンにマウスを合わせると、TDX Quote から解析された詳細な認証情報を確認できます。

ブラウザの開発者ツールを使用して詳細情報を表示することもできます。出力は次の例のようになります。

よくある質問
pip 使用時のパッケージダウンロード速度の低下
Open WebUI コンパイル時の「Cannot find package」エラー
関連ドキュメント
Open WebUI はネイティブで HTTP プロトコルのみをサポートするように設計されています。転送中のデータを保護するには、Alibaba Cloud SLB で HTTPS 認証を展開します。手順については、「HTTPS リクエストの片方向認証の設定」をご参照ください。