すべてのプロダクト
Search
ドキュメントセンター

Elastic Compute Service:第7世代のセキュリティ強化インスタンスにPyTorchディープラーニングモデルをデプロイする

最終更新日:Aug 22, 2024

このトピックでは、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ディープラーニングアプリケーションの整合性を確保できます。

アーキテクチャ

図 1. アーキテクチャ

image

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ベースのハードウェアによって保護され、利用可能であるが見えないため、データ伝送とデータ使用のセキュリティが保証されます。

図2. 手順

image

前提条件

PyTorchディープラーニングモデルをデプロイする環境を準備します。

説明

この方法では、dkeyserver、dkeycache、およびSGXを含むPyTorchは、簡単に検証できるように同じセキュリティ強化インスタンスにデプロイされます。

  1. セキュリティ強化インスタンスを作成します。

    詳細については、「信頼できるインスタンスの作成」をご参照ください。 次のパラメータに注意してください。

    • イメージ: Alibaba Cloud Linux 2.1903 LTS 64ビット (UEFI) を選択します。

    • パブリックIPアドレス: パブリックIPv4アドレスの割り当てを選択します。

  2. SGX暗号化コンピューティング環境を構築します。

    詳細については、「SGX機密コンピューティング環境の構築」をご参照ください。

  3. Python 3をインストールし、環境変数を設定します。

    この例では、Python 3.6が使用されます。 ビジネス要件に基づいて、Python 3の別のバージョンをインストールできます。 詳細については、公式Python Webサイトをご覧ください。

  4. 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

    次のコマンド出力は、パッケージがインストールされていることを示します。

    安装所需的软件包

  5. 次のコマンドを実行して、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

手順

  1. ECS インスタンスにログインします。

    詳細については、「パスワードまたはキーを使用したLinuxインスタンスへの接続」をご参照ください。

  2. /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
  3. SGXベースのセキュリティ強化インスタンスで、PyTorchをSGXと共にコンパイルします。

    1. 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/

      编译oneDNN

    2. PyTorchの飛び地をコンパイルします。

      PyTorchとSGXのエンクレーブは、モデルパラメータの復号化とモデル予測操作を実行します。

      source /opt/alibaba/teesdk/intel/sgxsdk/environment
      cd /home/test/pytorch/enclave_ops/ideep-enclave
      作る 

      编译Pytorch Enclave

    3. 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.png

    4. 安全な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

      编译PyTorch安全计算运算符

  4. キーサーバー上のdkeyserver実行可能ファイルとSGXベースのセキュリティ強化インスタンス上のdkeycache実行可能ファイルをコンパイルして生成します。

    cd /home/test/pytorch/enclave_ops/deployment
    make

    编译生成dkeyserver和dkeycache

  5. キーサーバーでキーサービスを開始します。

    cd /home/test/pytorch/enclave_ops/deployment/bin/dkeyserver
    sudo ./dkeyserver

    キーサーバーが起動し、SGXベースのセキュリティ強化インスタンスにデプロイされたdkeycacheサービスからのキーリクエストを待機します。

    启动秘钥服务

  6. SGXベースのセキュリティ強化インスタンスでdkeycacheをコンパイルし、キー配布サービスを開始します。

    cd /home/test/pytorch/enclave_ops/deployment/bin/dkeycache
    sudo ./dkeycache

    起動後、dkeycacheはdkeyserverからすべてのモデルキーを要求します。 dkeyserverがSGXリモート認証を完了した後、dkeyserverは安全なリモート認証チャネルを使用して、dkeycacheのSGXエンクレーブにキーを送信します。

    启动本地密钥分发服务

  7. SGXベースのセキュリティ強化インスタンスでResNetベースのテストケースを実行します。

    cd /home/test/pytorch/enclave_ops/test
    sudo python whole_resnet.py

    PyTorchモデルの暗号文パラメーターは、SGXエンクレーブで復号化されます。 鍵はdkeycacheから取得され、暗号化されてエンクレーブに送信されます。

    运行ResNet测试用例