このトピックでは、PyTorchディープラーニングモデルをIntelにデプロイする方法について説明します。®Software Guard Extensions (SGX) ベースのセキュリティ強化インスタンスとPyTorchモデルの使用方法。
背景情報
人工知能 (AI) モデルは、大量のトレーニングデータと高い計算能力に基づいて構築されており、非常に貴重な形の知的財産です。 PyTorchは、柔軟で動的なプログラミング環境、動的グラフメカニズム、柔軟なネットワーキングアーキテクチャでAI開発者から広く認識されています。 ほとんどの場合、PyTorchモデルはAlibaba cloud ECS (Elastic Compute Service) インスタンスなどのクラウドサーバーにデプロイされます。 すべてのPyTorchモデル所有者とクラウドサービスプロバイダーは、パブリッククラウドにデプロイされたPyTorchモデルの可用性を維持し、モデルが見えないようにして盗難から保護する必要があります。
特定のセキュリティ強化されたECSインスタンスは、Intelベースの暗号化コンピューティング機能を提供します®SGXをして、高レベルのセキュリティを提供するハードウェアレベルの信頼できる機密環境を作成します。 これにより、コードとデータは機密で信頼性が高く、マルウェア攻撃から保護されます。
PyTorchディープラーニングモデルをセキュリティ強化されたECSインスタンスの信頼できる機密環境にデプロイして、データ送信とデータ使用のセキュリティ、およびPyTorchディープラーニングアプリケーションの整合性を確保できます。
アーキテクチャ
SGXベースのPyTorchエンドツーエンドのセキュリティモデルのパラメーターは、アーキテクチャの図に示されています。 モデルは、展開フェーズで暗号文に格納されます。 関連する動作は、SGXエンクレーブ内で実行される。 モデルパラメータは、SGXエンクレーブ内でのみ復号化され、鍵は、セキュアなリモート証明チャネルを使用することによって送信される。
このプラクティスには、dkeyserver、dkeycache、およびPyTorch with SGXの3つの役割が含まれます。 ロールのワークフローを [手順] の図に示します。
dkeyserver: PyTorchモデルユーザーにオンプレミスでデプロイされるキーサーバーです。 PyTorchモデルユーザーは、PyTorchが提供するツールを使用してPyTorchモデルパラメーターをSGXで暗号化し、オンプレミスのキーサーバーdkeyserverを構築します。 その後、暗号化されたモデルが送信され、Alibaba Cloud SGXベースのセキュリティ強化インスタンスにデプロイされます。 キーサーバーは、すべてのモデルキーとモデルIDを管理し、SGXベースのセキュリティ強化インスタンスのキー配布サービスからキーリクエストを受信します。
dkeycache: SGXベースのセキュリティ強化インスタンスにデプロイされているキー配布サービス。 SGXベースのセキュリティ強化インスタンスのキー配布サービスは、キーサーバーにすべてのモデルキーを要求します。 キーサーバがSGXリモート証明を完了した後、サーバは、安全なリモート証明チャネルを使用して、SGXベースのセキュリティ強化インスタンスのキー配布サービスによって配布されるSGXエンクレーブにキーを送信する。 この操作は、鍵配布サーバの起動後に自動的に完了します。
PyTorch with SGX: PyTorch (PyTorchインスタンス) を実行するSGXベースのセキュリティ強化インスタンスで、dkeycacheと同じサーバーにデプロイされています。 PyTorchインスタンスがモデルを使用して予測を行ったり、モデル推論の分類タスクを実行したりすると、PyTorchインスタンスは自動的にモデルキーの要求をキー配布サービスに送信します。 キーは暗号化され、SGXセキュアチャネルを使用してPyTorchインスタンスのSGXエンクレーブに送信されます。 PyTorchがSGXで開始したエンクレーブは、キーを使用してモデルパラメータを復号化し、モデル予測操作を実行します。 モデルパラメータは、プロセス全体を通してSGXベースのハードウェアによって保護され、利用可能であるが見えないため、データ伝送とデータ使用のセキュリティが保証されます。
前提条件
PyTorchディープラーニングモデルをデプロイする環境を準備します。
この方法では、dkeyserver、dkeycache、およびSGXを含むPyTorchは、簡単に検証できるように同じセキュリティ強化インスタンスにデプロイされます。
セキュリティ強化インスタンスを作成します。
詳細については、「信頼できるインスタンスの作成」をご参照ください。 次のパラメータに注意してください。
イメージ: Alibaba Cloud Linux 2.1903 LTS 64ビット (UEFI) を選択します。
パブリックIPアドレス: パブリックIPv4アドレスの割り当てを選択します。
SGX暗号化コンピューティング環境を構築します。
詳細については、「SGX機密コンピューティング環境の構築」をご参照ください。
Python 3をインストールし、環境変数を設定します。
この例では、Python 3.6が使用されます。 ビジネス要件に基づいて、Python 3の別のバージョンをインストールできます。 詳細については、公式Python Webサイトをご覧ください。
PyTorchの実行に必要なパッケージをインストールします。
PyTorchには、PythonやGCCなどのソフトウェアのバージョン要件があります。 次のコマンドを実行して、指定したソフトウェアバージョンをインストールします。
sudo yum update --skip-broken sudo yum install -y teesdk git gcc-c++ scl-utils alinux-release-experimentals python36-devel libbsd-devel sudo yum install -y devtoolset-7-gcc devtoolset-7-gdb devtoolset-7-binutils devtoolset-7-make devtoolset-7-gcc devtoolset-7-gcc-c++ scl -l devtoolset-7 sudo ln -sf /opt/rh/devtoolset-7/root/bin/g++ /usr/bin/g++ sudo ln -sf /opt/rh/devtoolset-7/root/bin/gcc /usr/bin/gcc sudo ln -sf /opt/rh/devtoolset-7/root/bin/c++ /usr/bin/c++ sudo ln -sf /usr/bin/python3 /usr/bin/python
次のコマンド出力は、パッケージがインストールされていることを示します。
次のコマンドを実行して、PyTorch依存関係ライブラリ、暗号化および復号化依存関係ライブラリ、およびCMakeをインストールします。
sudo pip3 install --upgrade pip sudo pip3 install astunparse numpy ninja pyyaml mkl mkl-include setuptools cmake cffi typing_extensions future six requests dataclasses setuptools_rust pycryptodomex pycryptodome torchvision sudo ln -sf /usr/local/bin/cmake /usr/bin/cmake sudo ln -sf /usr/local/bin/cmake /bin/cmake
手順
ECS インスタンスにログインします。
詳細については、「パスワードまたはキーを使用したLinuxインスタンスへの接続」をご参照ください。
/home/testなどの作業ディレクトリに切り替えて、サンプルPyTorchコードを取得します。
サンプルコードには、dkeyserver、dkeycache、およびPyTorch with SGXのコードが含まれています。
cd /home/test git clone https://github.com/intel/sgx-pytorch -b sgx pytorch cd /home/test/pytorch git submodule sync && git submodule update --init --recursive
explicit_bzero
エラーが発生した場合は、次のパッチを追加して再試行します。git pull origin pull/15/head
SGXベースのセキュリティ強化インスタンスで、PyTorchをSGXと共にコンパイルします。
oneAPI Deep Neural Network Library (oneDNN) をコンパイルします。
oneDNNは、ディープラーニングアプリケーション用の基本的なビルディングブロックのオープンソースのクロスプラットフォームパフォーマンスライブラリです。 このライブラリは、Intel Architectureプロセッサ、Intel Processor Graphics、およびXe Graphics用に最適化されています。 oneDNNは、Intel CPUおよびGPUのアプリケーションパフォーマンスを向上させたいディープラーニングアプリケーションおよびモデルの開発者に適しています。
source /opt/alibaba/teesdk/intel/sgxsdk/environment cd /home/test/pytorch/third_party/sgx/linux-sgx git am ../0001* cd external/dnnl make sudo cp sgx_dnnl/lib/libsgx_dnnl.a /opt/alibaba/teesdk/intel/sgxsdk/lib64/libsgx_dnnl2.a sudo cp sgx_dnnl/include/* /opt/alibaba/teesdk/intel/sgxsdk/include/
PyTorchの飛び地をコンパイルします。
PyTorchとSGXのエンクレーブは、モデルパラメータの復号化とモデル予測操作を実行します。
source /opt/alibaba/teesdk/intel/sgxsdk/environment cd /home/test/pytorch/enclave_ops/ideep-enclave 作る
PyTorchをコンパイルします。
cd /home/test/pytorch pip3 uninstall torch #Uninstall the installed PyTorch. The self-compiled PyTorch will be installed. source /opt/alibaba/teesdk/intel/sgxsdk/environment python setup.py develop --cmake-only sudo python setup.py develop && python -c "import torch"
安全なPyTorchコンピューティング演算子をコンパイルします。
source /opt/alibaba/teesdk/intel/sgxsdk/environment cd /home/test/pytorch/enclave_ops/secure_op && mkdir build && cd build cmake -DCMAKE_PREFIX_PATH="$(python -c 'import torch.utils; print(torch.utils.cmake_prefix_path)')" .. make
キーサーバー上のdkeyserver実行可能ファイルとSGXベースのセキュリティ強化インスタンス上のdkeycache実行可能ファイルをコンパイルして生成します。
cd /home/test/pytorch/enclave_ops/deployment make
キーサーバーでキーサービスを開始します。
cd /home/test/pytorch/enclave_ops/deployment/bin/dkeyserver sudo ./dkeyserver
キーサーバーが起動し、SGXベースのセキュリティ強化インスタンスにデプロイされたdkeycacheサービスからのキーリクエストを待機します。
SGXベースのセキュリティ強化インスタンスでdkeycacheをコンパイルし、キー配布サービスを開始します。
cd /home/test/pytorch/enclave_ops/deployment/bin/dkeycache sudo ./dkeycache
起動後、dkeycacheはdkeyserverからすべてのモデルキーを要求します。 dkeyserverがSGXリモート認証を完了した後、dkeyserverは安全なリモート認証チャネルを使用して、dkeycacheのSGXエンクレーブにキーを送信します。
SGXベースのセキュリティ強化インスタンスでResNetベースのテストケースを実行します。
cd /home/test/pytorch/enclave_ops/test sudo python whole_resnet.py
PyTorchモデルの暗号文パラメーターは、SGXエンクレーブで復号化されます。 鍵はdkeycacheから取得され、暗号化されてエンクレーブに送信されます。