大規模言語モデル (LLM) 技術が普及するにつれて、ビジネス能力を向上させるために LLM を利用する企業が増えています。その結果、モデルとユーザーデータを安全に管理することが極めて重要になっています。本トピックでは、異種コンフィデンシャルコンピューティングインスタンス上に計測機能付きの LLM 推論環境を構築するためのベストプラクティスについて説明します。
背景情報
Alibaba Cloud の異種コンフィデンシャルコンピューティングインスタンス (gn8v-tee) は、CPU ベースの TDX コンフィデンシャルコンピューティングインスタンスを基盤とし、信頼できる実行環境 (TEE) に GPU を統合しています。これにより、CPU と GPU 間で転送され、GPU 内で処理されるデータが保護されます。本トピックでは、Intel TDX の計測機能とリモートアテステーション機能を、異種コンフィデンシャルコンピューティングインスタンス上の LLM 推論サービスに統合する方法を説明します。このソリューションは、LLM サービスのための堅牢な認証とプライバシー保護のワークフローを構築します。これにより、モデルとユーザーデータを安全に管理し、サービスライフサイクル全体を通じてその完全性を維持して、不正アクセスを防止します。
このソリューションは、2つの設計原則に基づいています。
機密性:モデルとユーザーデータは、コンフィデンシャルコンピューティングインスタンスの安全な境界内でのみ処理され、平文データが外部に漏洩するのを防ぎます。
完全性:LLM 推論サービス環境のすべてのコンポーネント (推論フレームワーク、モデルファイル、対話型インターフェイスなど) のコード、データ、設定は、改ざんを防止し、厳格な第三者監査を通じて検証可能である必要があります。
技術アーキテクチャ
次の図は、このソリューションの技術アーキテクチャを示しています。
次の表に、アーキテクチャのコンポーネントを示します。
クライアント
大規模言語モデルサービスにアクセスするためのユーザーインターフェイス (UI) です。セッションを開始し、リモートモデルサービス環境の信頼性を検証し、バックエンドのモデルサービスと安全に通信します。
リモートアテステーションサービス
このコンポーネントは、Alibaba Cloud リモートアテステーションサービスを使用して、プラットフォームの信頼できるコンピューティングベース (TCB) や推論モデルサービス環境など、モデル推論サービス環境のセキュリティ体制を検証します。
推論サービスコンポーネント
Ollama:モデル推論リクエストを処理するモデルサービングフレームワークです。本ソリューションではバージョン
v0.5.7を使用します。DeepSeek モデル:本ソリューションでは、DeepSeek-R1-70B (int4 量子化) 蒸留モデルを使用します。
Open WebUI:コンフィデンシャル VM 内で実行される Web ベースの対話型インターフェイスで、RESTful API を介してユーザーのモデルサービスリクエストを受け取ります。本ソリューションではバージョン
v0.5.20を使用します。CCZoo オープンソースプロジェクト:本ソリューションでは、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 クォート) も要求します。この証明は、ユーザーセッション管理サービス (Open WebUI) とモデルサービス (Ollama + DeepSeek) を含むリモートサービス環境の信頼性を検証するために使用されます。
アテステーションの生成:Open WebUI のバックエンドは、ユーザーセッション作成プロセスからのアテステーションリクエストを Intel TDX ベースのコンフィデンシャル VM に転送します。その後、コンフィデンシャル VM は、CPU ハードウェアに基づいて完全な証明書チェーンを持つ TDX リモートアテステーションレポート (TDX クォート) を生成します。
アテステーションの検証:クライアントは、受け取ったアテステーション (TDX クォート) を検証のためリモートアテステーションサービスに送信します。サービスは、デジタル署名、証明書チェーン、セキュリティポリシーなど、アテステーションの有効性を検証し、リモートモデルサービス環境のセキュリティ体制と完全性を確認する結果を返します。
コンフィデンシャルな大規模モデル推論
リモートアテステーションの成功:クライアントは、検証済みの安全なモードで実行されているため、リモートモデルサービスを信頼できます。この保証により、どのシステムも完全にリスクがないわけではありませんが、エンドユーザーのデータ漏洩のリスクが大幅に軽減されます。
リモートアテステーションの失敗:アテステーションサービスはエラーメッセージを返し、リモートアテステーションが失敗したことを示します。この場合、ユーザーまたはシステムは後続のサービスリクエストを中止できます。あるいは、潜在的なセキュリティリスクについて警告を発行した上でサービスを続行することもできます。ただし、セッションを続行すると、リモートモデルサービスが潜在的なデータセキュリティリスクにさらされることになります。
操作手順
手順1:異種コンフィデンシャルコンピューティングインスタンスの作成
Ollama によってダウンロードされたモデルデータは /usr/share/ollama/.ollama/models ディレクトリに保存されます。モデルファイルはサイズが大きいことが多いため、たとえば、DeepSeek-R1 70b 量子化モデルは約 40 GB です。インスタンスを作成する際は、実行するモデルのサイズを考慮し、適切な容量のクラウドディスクを選択してください。モデルファイルサイズの 2~3 倍のクラウドディスクを推奨します。
コンソール
コンソールでヘテロジニアスコンフィデンシャルコンピューティングインスタンスを作成するプロセスは、標準インスタンスの作成と類似していますが、特定の構成オプションが必要です。このセクションでは、ヘテロジニアスコンフィデンシャルコンピューティングインスタンスの主要な構成をハイライトします。その他の一般的な構成の詳細については、「ウィザードを使用してインスタンスを作成する」をご参照ください。
-
ECS コンソール - インスタンス に移動します。
-
画面上部のナビゲーションバーで、管理対象のリソースのリージョンおよびリソースグループを選択します。
[インスタンスの作成] をクリックし、以下の設定でインスタンスを構成します。
構成項目
説明
リージョンおよびゾーン
中国 (北京) ゾーン L
インスタンスタイプ
インスタンスタイプ ecs.gn8v-tee.4xlarge 以上のみがサポートされています。
イメージ
Alibaba Cloud Linux 3.2104 LTS 64 ビット イメージを選択します。
パブリック IP アドレス
[パブリック IPv4 アドレスの割り当て] を選択します。これにより、後続で NVIDIA 公式 Web サイトからドライバーをダウンロードできるようになります。
重要8 GPU を搭載した機密インスタンスを作成または再起動する際は、追加のセカンダリ Elastic Network Interface(ENI)またはデータディスクを追加しないでください。これにより、インスタンスの起動に失敗する可能性があります。
画面の指示に従って、インスタンス作成を完了します。
API/CLI
「RunInstances」操作を呼び出すか、Alibaba Cloud CLI を使用して、TDX 対応 ECS インスタンスを作成できます。主要なパラメーターについては、以下の表で説明しています。
パラメーター | 説明 | 例 |
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 レポートは、TDX インスタンスの ID を表す CPU ハードウェアによって直接生成されるデータ構造です。これには、ATTRIBUTES、ランタイム拡張可能測定レジスター (RTMR)、高信頼コンピューティング・ベース・セキュリティ・バージョン番号 (TCB SVN) などの重要な情報が含まれており、その完全性は暗号化方式によって保護されます。詳細については、「Intel TDX Module」をご参照ください。
Alibaba Cloud コンフィデンシャルコンピューティング yum リポジトリを追加します。
パブリックエンドポイントの形式:
https://enclave-[Region-ID].oss-[Region-ID].aliyuncs.com/repo/alinux/enclave-expr.repoVPC エンドポイントの形式:
https://enclave-[Region-ID].oss-[Region-ID]-internal.aliyuncs.com/repo/alinux/enclave-expr.repo上記の URL の [Region-ID] を、TDX インスタンスが存在するリージョンの ID に置き換えます。次のサンプルコードは、中国 (北京) リージョンの 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
ビルドツールとサンプルコードをインストールします。
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 は中国 (北京) リージョンの 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 のインストール
「Workbench を使用した Linux インスタンスへの接続」を参照し、インスタンスに接続します。
次のコマンドを実行して 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 のインストールに問題が発生した場合は、Node Version Manager (nvm) を使用して特定のバージョンの 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 フォルダーをバックエンドディレクトリにコピーし、frontend に名前を変更します。
rm -rf ./backend/open_webui/frontend cp -r build ./backend/open_webui/frontend説明この時点で、コンパイルされた Open WebUI には Alibaba Cloud リモートアテステーションサービスが設定されています。設定情報は
/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 アテステーションの検証
大規模モデルの実行と 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] Embedding model set: sentence-transformers/all-MiniLM-L6-v2 /home/ecs-user/miniforge3/envs/open-webui/lib/python3.11/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 サービスへのアクセス
セキュリティグループルールを追加します。
異種構成の Confidential Computing インスタンスのセキュリティグループに、TCP ポート 8080 でのインバウンドトラフィックを許可するルールを追加します。詳細については、「セキュリティグループルールを追加する」をご参照ください。
ブラウザから Open WebUI サービスにアクセスします。
ローカルブラウザを開き、http://{ip_address}:{port} にアクセスします。パラメーターを実際の値に置き換えてください。
{ip_address}:Open WebUI が配置されているインスタンスのパブリック IP アドレス。
{port}:デフォルトのポート番号は 8080 です。
リモートアテステーションが成功すると、次の図に示すように、ダイアログボックスの最初のアイコンに緑色のチェックマークが表示されます。それ以外の場合、アイコンは赤色になります。
説明[New Chat] ボタンをクリックするたびに、バックエンドサービスは自動的にコンフィデンシャルコンピューティング環境から TDX クォートを取得し、それをリモートアテステーションサービスに送信して、認証結果を返します。初期状態では、このアイコンは赤色で、アテステーションが保留中または失敗したことを示します。リモートアテステーションが成功すると緑色に変わります。
TDX アテステーション情報の検証
ダイアログボックスの最初のアイコンにカーソルを合わせると、TDX クォートから解析された詳細な認証情報を確認できます。

ブラウザの開発者ツールで詳細情報を表示することもできます。次の図に例を示します。

よくある質問
pip のダウンロードが遅い
Open WebUI のコンパイル時に "Cannot find package" エラーが表示される
関連ドキュメント
Open WebUI は設計上 HTTP のみをサポートします。転送中のデータを保護するために、Alibaba Cloud CLB を使用して HTTPS を有効化できます。詳細については、「CLB を使用した HTTPS サービスのデプロイ (一方向認証)」をご参照ください。