ZStack をベースにしたディープラーニング クラウド プラットフォームの構築

ZStack をベースにしたディープラーニング クラウド プラットフォームの構築

序文

ディープラーニングは機械学習と人工知能研究の人気の分野であり、今日最も人気のある科学研究トレンドの 1 つです。ディープラーニング手法はコンピュータービジョンと機械学習に革命的な進歩をもたらし、新しいディープラーニング技術が絶えず登場しています。ディープラーニングは急速に発展しているため、新しい研究者がその技術に追いつくのは困難です。国内の大手パブリッククラウドベンダーはいずれも対応するディープラーニング関連製品を提供しているが、初心者にとってはあまり実用的ではない。この記事では、製品化されたクラウドプラットフォーム「ZStack」をベースに、初心者にも優しく、操作しやすく、使いやすいディープラーニングクラウドプラットフォームの構築方法を紹介します。

ZStack は軽量なので、クラウド プラットフォームを展開し、通常の PC のみを使用してディープラーニング プラットフォームを構築できます。読者はこの記事を、より大規模で包括的なディープラーニング クラウド プラットフォームに簡単に拡張できます。

1. ZStackの紹介

ZStack は、次世代のオープンソース クラウド コンピューティング IaaS (Infrastructure as a Service) ソフトウェアです。これは主に将来のインテリジェント データ センターを対象としており、柔軟で完全な API を提供することで、コンピューティング、ストレージ、ネットワークなどのデータ センター リソースを管理します。ユーザーは、ZStack を使用して独自のインテリジェント クラウド データ センターを迅速に構築したり、安定した ZStack 上に柔軟なクラウド アプリケーション シナリオを構築したりできます。

ZStackの機能アーキテクチャ

ZStack製品の利点:

ZStack は、独自のクラウド プラットフォーム 4S (シンプル、強力、スケーラブル、スマート) 標準に基づいて設計された次世代クラウド プラットフォーム IaaS ソフトウェアです。

1. シンプル

• 簡単なインストールと展開: インストール ファイルのオンライン ダウンロードを提供し、ベア メタルからクラウド プラットフォームへのインストールと展開を 30 分で完了します。

• シンプルなクラウド プラットフォーム構築: クラウド ホストのバッチ操作 (生成、削除など) をサポートし、リスト表示やスライディング ウィンドウの詳細を提供します。

• シンプルで実用的な操作: 詳細なユーザー マニュアル、十分なヘルプ情報、優れたコミュニティ、標準 API が提供されます。

• 使いやすい UI インタラクション: 適切に設計されたプロフェッショナルな操作インターフェイス、合理化された操作、強力な機能。

2. 強い

• 安定した効率的なシステム アーキテクチャ設計: 完全に非同期のバックグラウンド アーキテクチャ、インプロセス マイクロサービス アーキテクチャ、ロックフリー アーキテクチャ、ステートレス サービス アーキテクチャ、一貫したハッシュ リングを備えており、システム アーキテクチャの効率性と安定性を確保します。現在、単一の管理ノードで数万台の物理ホストと数十万台のクラウドホストを管理することが実現されています。複数の管理ノードで構築されたクラスターは、1 つのデータベースと一連のメッセージ バスを使用して、数十万の物理ホスト、数百万のクラウド ホストを管理し、数万の API を同時に処理します。

• 高同時実行 API リクエストをサポート: 単一の ZStack 管理ノードで、1 秒あたり数万件の同時 API 呼び出しリクエストを簡単に処理できます。

• 厳格な HA 要件をサポート: ネットワークまたはノードに障害が発生した場合、ビジネス クラウド ホストは自動的に他の正常なノードに切り替えて操作を実行できます。管理ノード仮想化を使用することで、単一の管理ノードの高可用性が実現され、障害発生時には管理ノードの動的な移行がサポートされます。

3. スケーラブル

• 無制限のサポート規模: 単一の管理ノードで、1 台から数万台の物理ホストと数十万台のクラウド ホストを管理できます。

• 完全なAPI配信: ZStackはIaaS APIの完全なセットを提供しており、ユーザーはこれらのAPIを使用して新しいクロスリージョン可用性ゾーンの構築を完了できます。

ネットワーク構成の変更と物理サーバーのアップグレード。

• リソースはオンデマンドで割り当て可能: クラウド ホストやクラウド ストレージなどの重要なリソースは、ユーザーのニーズに応じて拡張または縮小できます。 ZStackはクラウドホストをサポートするだけでなく

ホストの CPU、メモリなどのリソースをオンラインで変更したり、クラウド ホストのネットワーク帯域幅、ディスク帯域幅などのリソースを動的に調整したりできます。

4. 賢い

• 自動化された運用および保守管理: ZStack 環境では、すべてが API によって管理されます。 ZStackはAnsibleライブラリを使用して完全に自動化されたデプロイメントを実現し、

アップグレード、自動検出と再接続、およびネットワーク ジッタまたは物理ホストの再起動後の各ノードへの自動再接続。スケジュールされたタスクはタイミングをサポートします

クラウド ホストのオン/オフを切り替え、クラウド ホストのスケジュールされたスナップショットなどのポーリング操作を実行します。

• オンラインシームレスアップグレード: ワンクリックで 5 分以内にシームレスアップグレード。ユーザーは管理ノードと制御ノードのアップグレードのみを行う必要があります。コンピューティングノード、ストレージノード、ネットワークノード

起動後、管理・制御ソフトウェアは自動的にアップグレードされます。

• インテリジェントな UI インタラクション インターフェース: ユーザー エラーを回避するためのリアルタイムのリソース計算。

• リアルタイムのグローバル監視:リアルタイム監視とインテリジェントな割り当てにより、クラウドプラットフォーム全体のシステムリソースの現在の消費状況をリアルタイムで把握します。

IT ソフトウェアとハ​​ードウェアのリソースを節約します。

0x2 ディープラーニングプラットフォームの構築

2.1 コンポーネントのデプロイメントの概要

  • テンソルフロー

これは、高性能数値計算用のオープンソース ソフトウェア ライブラリです。柔軟なアーキテクチャにより、ユーザーはさまざまなプラットフォーム (CPU、GPU、TPU) やデバイス (デスクトップ デバイス、サーバー クラスター、モバイル デバイス、エッジ デバイスなど) にコンピューティング作業を簡単に展開できます。 TensorFlow はもともと、機械学習とディープラーニングを強力にサポートするために Google Brain チームの研究者とエンジニアによって開発されたもので、その柔軟な数値計算コアは他の多くの科学分野でも広く使用されています。

  • cuDNN

NVIDIA CUDA ディープ ニューラル ネットワーク ライブラリ (cuDNN) は、ディープ ニューラル ネットワーク プリミティブ用の GPU アクセラレーション ライブラリです。 cuDNN は、前方および後方畳み込み、プーリング、正規化、および活性化レイヤーなどの標準ルーチンに対して高度に調整された実装を提供します。 cuDNN は NVIDIA Deep Learning SDK の一部です。

  • テンソルボード

動作中のTensorflowの計算グラフや、各種指標の時間経過に伴う変化傾向、トレーニングに使用したデータ情報を効果的に表示できる可視化ツールです。

  • ジュピター

Jupyter は、ライブ コード、数式、視覚化、マークダウンをサポートし、文芸的なプログラム ドキュメントを簡単に作成して共有できるインタラクティブなノートブックです。一般的には、データのクリーニングと変換、数値シミュレーション、統計モデリング、機械学習などに使用されます。

2.2 クラウドプラットフォーム環境の準備

環境の紹介

ディープラーニング プラットフォームを構築するには、次の構成を使用します。

物理サーバーの構成GPU モデルクラウドホストの構成クラウドホストシステムIPアドレスホスト名
インテル(R) i5-3470 DDR3 24G

NVIDIA Quadro P2000

8vCPU16G CentOS7.4 192.168.66.6 GPU-TF

今回は、通常の PC を使用して ZStack クラウド プラットフォームを展開します。クラウド プラットフォームの GPU 透過転送機能を使用して、NVIDIA Quadro P2000 グラフィックス カードを CentOS 7.4 仮想マシンに透過的に転送し、プラットフォームを構築します。

ZStack クラウド プラットフォームの展開手順の詳細については、公式ドキュメントを参照してください: https://www.zstack.io/help/product_manuals/user_guide/3.html#c3

2.2.1 クラウドホストを作成する

「クラウド リソース プール」を選択し、「クラウド ホスト」をクリックします。 「クラウド ホストの作成ボタン」をクリックして、クラウド ホストの作成ページを開きます。

クラウド ホストを作成する手順:

1. 追加方法を選択します。プラットフォームは、単一のクラウド ホストの作成と複数のクラウド ホストの作成をサポートしています。ニーズに応じて選択してください。

2. クラウドホスト名を設定します。管理や保守を容易にするために、業務システム名にちなんだ名前を付けることをお勧めします。

3. コンピューティング仕様を選択します。定義されたコンピューティング仕様とビジネス ニーズに基づいて適切なコンピューティング仕様を選択します。

4. 画像テンプレートを選択します。ビジネスニーズに応じて対応する画像テンプレートを選択します。

5. 3層ネットワークを選択します。新しいバージョンでは、プラットフォームの 3 層ネットワークは IPv4 と IPv6 の両方をサポートします。ビジネスニーズに合わせてお選びください。クラウド ホストを作成するときに、ネットワーク カードのプロパティを設定することもできます。

6. 設定が正しいことを確認したら、「OK」をクリックして作成を開始します。

2.2.2 GPU透過操作

クラウド ホスト名をクリックし、[構成情報] をクリックします。

GPU デバイス タブを見つけて、[操作] をクリックし、[ロード] を選択して、クラウド ホストが直接使用する対応する GPU デバイスを選択します。

0x3 展開を開始

3.1 動作環境の準備

  1. pipをインストールする
  2.  
  3. # カール https://bootstrap.pypa.io/get-pip.py -o get-pip.py
  4.  
  5. # python get-pip.py
  6.  
  7. # pip --version  
  8.  
  9. /usr/lib/python2.7/site-packages/pipからのpip 18.1 (python 2.7)
  10.  
  11. # python --version  
  12.  
  13. Python 2.7.5
  14.  
  15. GCC G++をインストールする
  16.  
  17. # yum で gcc gcc-c++ をインストールします
  18.  
  19. # gcc --バージョン 
  20.  
  21. gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36)
  22.  
  23. 必要なパッケージをインストールする
  24.  
  25. #yum -y zlib をインストールします*
  26.  
  27. #yum インストール openssl-devel -y
  28.  
  29. #yum sqliteをインストール* -y
  30.  
  31. CentOS のデフォルトの Python 2.7.5 バージョンを 3.6.5 にアップグレードします。
  32.  
  33. Pythonソースパッケージをダウンロード
  34.  
  35. # wget -c https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz
  36.  
  37. ソースパッケージを解凍する
  38.  
  39. # tar -zvxf Python-3.6.5.tgz
  40.  
  41. ソースディレクトリを入力してください
  42.  
  43. # cd Python-3.6.5/
  44.  
  45. # ./configure --with-ssl  
  46.  
  47. コンパイルしてインストールする
  48.  
  49. # 作成 && インストール
  50.  
  51. 新しくインストールされたpython3のファイルの場所を確認する
  52.  
  53. # ll /usr/ローカル/bin/python*

  1. デフォルトのPythonバージョンを3.xに設定する
  2.   
  3. # mv /usr/bin/python /usr/bin/python.bak
  4. # ln -s /usr/ローカル/bin/python3 /usr/bin/python
  5.   
  6. バージョン2.xのファイルの場所を確認する
  7.   
  8. # ll /usr/bin/python*

  1. yumコマンドが正しく動作するためには、Pythonをバージョン2.xを指すように設定する必要があります。
  2.  
  3. # vim /usr/bin/yum
  4.  
  5. #vim /usr/libexec/urlgrabber-ext-down
  6.  
  7. 上記の2つのファイルのヘッダーファイルを古いバージョンに変更するだけです
  8. !/usr/bin/python --> !/usr/bin/python2.7  
  9.  
  10. python-devとpython-pipをインストールする
  11.  
  12. # yum インストール python-dev python-pip -y
  13.  
  14. 組み込みのNouveauドライバーを無効にする
  15.  
  16. ヌーボーの使用
  17.  
  18. lsmod コマンドgrep 初心者
  19.  
  20. ヌーボー 1662531 0
  21.  
  22. mxm_wmi 13021 1 新しい
  23.  
  24. wmi 19086 2 mxm_wmi、新しい
  25.  
  26. ビデオ 24538 1 新規
  27.  
  28. i2c_algo_bit 13413 1 新規
  29.  
  30. drm_kms_helper 176920 2 qxl、ヌーボー
  31.  
  32. ttm 99555 2 qxl、新しい
  33.  
  34. drm 397988 5 qxl、ttm、drm_kms_helper、nouveau
  35.  
  36. i2c_core 63151 5 drm、i2c_piix4、drm_kms_helper、i2c_algo_bit、nouveau
  37.  
  38. #vim /usr/lib/modprobe.d/dist-blacklist.conf
  39.  
  40. #ヌーボー
  41.  
  42. ブラックリストヌーボー
  43.  
  44. オプション nouveau modeset=0
  45.  
  46. :wq 保存して終了
  47.  
  48. # mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak バックアップ ブート イメージ
  49.  
  50. # dracut /boot/initramfs-$(uname -r).img $(uname -r) ブートイメージを再構築します
  51.  
  52. # 再起動
  53.  
  54. lsmod を実行します。 grep nouveau 無効化が有効かどうかを再度確認します

3.2 CUDAをインストールする

  1. カーネルをアップグレードします。
  2.   
  3. # rpm -import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
  4.   
  5. # rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
  6.   
  7. # yum -y --enablerepo = elrepo -kernel をインストール kernel-ml.x86_64 kernel-ml-devel.x86_64
  8.   
  9. カーネル バージョンのデフォルトの起動順序を表示します。
  10.   
  11. awk -F\' '$ 1 == "メニューエントリ " {印刷 $2}' /etc/grub2.cfg
  12.   
  13. CentOS Linux (4.20.0-1.el7.elrepo.x86_64) 7 (コア)
  14.   
  15. CentOS Linux (3.10.0-862.el7.x86_64) 7 (コア)
  16.   
  17. CentOS Linux (0-rescue-c4581dac5b734c11a1881c8eb10d6b09) 7 (コア)
  18.   
  19. #vim /etc/default/grub
  20.   
  21. GRUB_DEFAULT =保存済みGRUB_0 =保存済みに変更  
  22.   
  23. grub2-mkconfigコマンドを実行してカーネル構成を再作成します。
  24.   
  25. # grub2-mkconfig -o /boot/grub2/grub.cfg
  26.   
  27. #リブート
  28.   
  29. # uname -r 再起動後にカーネルバージョンを確認する
  30.   
  31. 4.20.0-1.el7.elrepo.x86_64
  32.   
  33. CUDA Toolkit をインストールするには 2 つの方法があります。
  34.   
  35. パッケージのインストール (RPM および Deb パッケージ)
  36. 実行ファイルのインストール
  37. ここではRunfileモードを使用してインストールすることを選択します
  38.   
  39. インストール パッケージのダウンロード: https://developer.nvidia.com/compute/cuda/10.0/Prod/local_installers/cuda_10.0.130_410.48_linux
  40.  
  41. オペレーティング システムに応じてインストール パッケージをフィルターし、ダウンロードします。ダウンロードリンクをコピーし、wget -cコマンドを使用して直接ダウンロードします。
  42.   
  43. # wget -c https://developer.nvidia.com/compute/cuda/10.0/Prod/local_installers/cuda_10.0.130_410.48_linux
  44.   
  45. #chmod +x cuda_10.0.130_410.48_linux
  46.   
  47. #./cuda_10.0.130_410.48_linux
  48.   
  49. 先ほど読んだ EULA に同意しますか?
  50.   
  51. 承諾/辞退/辞退: 承諾
  52.   
  53. Linux-x86_64 410.48 用の NVIDIA アクセラレーテッド グラフィックス ドライバーをインストールしますか?
  54.   
  55. (はい)/(いいえ)/(き): y
  56.   
  57. CUDA 10.0 ツールキットをインストールしますか?
  58.   
  59. (はい)/(いいえ)/(き): y
  60.   
  61. ツールキットの場所を入力
  62.   
  63. [ デフォルトは /usr/local/cuda-10.0 ]:
  64.   
  65. /usr/local/cuda にシンボリックリンクをインストールしますか?
  66.   
  67. (はい)/(いいえ)/(き): y
  68.   
  69. CUDA 10.0 サンプルをインストールしますか?
  70.   
  71. (はい)/(いいえ)/(き): y
  72.   
  73. CUDAサンプルの場所を入力
  74.   
  75. [ デフォルトは /root ]:
  76.   
  77. CUDA ランタイム環境変数を設定します。
  78.   
  79. # vim /etc/プロファイル
  80.   
  81. # CUDA
  82.   
  83. PATHをエクスポート=/usr/local/cuda-10.0/bin${PATH:+:${PATH}}
  84.   
  85. LD_LIBRARY_PATHを /usr/local/cuda-10.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}} にエクスポートします。
  86.   
  87. # ソース /etc/profile
  88.   
  89. バージョンを確認する
  90.   
  91. # nvcc --バージョン
  92.   
  93. nvcc: NVIDIA (R) Cuda コンパイラ ドライバー
  94.   
  95. 著作権 (c) 2005-2018 NVIDIA Corporation
  96.   
  97. Sat_Aug_25_21:08:01_CDT_2018 に作成
  98.   
  99. Cuda コンパイル ツール、リリース 10.0、V10.0.130
  100.   
  101. 次の例を使用して、CUDA が正常かどうかを確認します。
  102.   
  103. #cd /root/NVIDIA_CUDA-10.0_Samples/1_Utilities/deviceQuery
  104.   
  105. # 作る
  106.   
  107. "/usr/local/cuda-10.0"/bin/nvcc -ccbin g++ -I../../common/inc -m64 -gencode arch = compute_30 code = sm_30 -gencode arch = compute_35 code = sm_35 -gencode arch = compute_37 code = sm_37 -gencode arch = compute_50 code = sm_50 -gencode arch = compute_52 code = sm_52 -gencode arch = compute_60 code = sm_60 -gencode arch = compute_61 code = sm_61 -gencode arch = compute_70 code = sm_70 -gencode arch = compute_75 code = sm_75 -gencode arch = compute_75 code = compute_75 -oデバイスクエリ.o -c デバイスクエリ.cpp
  108.   
  109. "/usr/local/cuda-10.0"/bin/nvcc -ccbin g++ -m64 -gencode arch = compute_30 code = sm_30 -gencode arch = compute_35 code = sm_35 -gencode arch = compute_37 code = sm_37 -gencode arch = compute_50 code = sm_50 -gencode arch = compute_52 code = sm_52 -gencode arch = compute_60 code = sm_60 -gencode arch = compute_61 code = sm_61 -gencode arch = compute_70 code = sm_70 -gencode arch = compute_75 code = sm_75 -gencode arch = compute_75 code = compute_75 -o deviceQuery deviceQuery.o
  110.   
  111. mkdir -p ../../bin/x86_64/linux/リリース
  112.   
  113. cp デバイスクエリ ../../bin/x86_64/linux/release
  114.   
  115. # cd ../../bin/x86_64/linux/release/
  116.   
  117. # ./デバイスクエリ
  118.   
  119. #./deviceQuery 開始しています...
  120.   
  121. CUDA デバイス クエリ (ランタイム API) バージョン (CUDART 静的リンク)
  122.   
  123. CUDA 対応デバイスが 1 台検出されました
  124.   
  125. デバイス 0:「Quadro P2000」
  126.   
  127. CUDA ドライバー バージョン / ランタイム バージョン 10.0 / 10.0
  128.   
  129. CUDA 機能メジャー/マイナー バージョン番号: 6.1
  130.   
  131. グローバルメモリの合計量: 5059 MBytes (5304745984 バイト)
  132.   
  133. (8) マルチプロセッサ、(128) CUDA コア/MP: 1024 CUDA コア
  134.   
  135. GPU 最大クロック レート: 1481 MHz (1.48 GHz)
  136.   
  137. メモリクロックレート: 3504 MHz
  138.   
  139. メモリバス幅: 160 ビット
  140.   
  141. L2 キャッシュ サイズ: 1310720 バイト
  142.   
  143. 最大テクスチャ次元サイズ (x,y,z) 1D =(131072)、 2D =(131072, 65536)、 3D =(16384, 16384, 16384)
  144.   
  145. 最大レイヤー 1D テクスチャ サイズ、(num) レイヤー1D =(32768)、2048 レイヤー
  146.   
  147. 最大レイヤー 2D テクスチャ サイズ、(num) レイヤー2D =(32768, 32768)、2048 レイヤー
  148.   
  149. 定数メモリの合計量: 65536 バイト
  150.   
  151. ブロックあたりの共有メモリの合計量: 49152 バイト
  152.   
  153. ブロックあたりの使用可能なレジスタの総数: 65536
  154.   
  155. ワープサイズ: 32
  156.   
  157. マルチプロセッサあたりの最大スレッド数: 2048
  158.   
  159. ブロックあたりの最大スレッド数: 1024
  160.   
  161. スレッド ブロックの最大次元サイズ (x,y,z): (1024, 1024, 64)
  162.   
  163. グリッド サイズの最大次元サイズ (x,y,z): (2147483647, 65535, 65535)
  164.   
  165. 最大メモリピッチ: 2147483647 バイト
  166.   
  167. テクスチャアラインメント: 512 バイト
  168.   
  169. 同時コピーとカーネル実行: 2 つのコピー エンジンで可能
  170.   
  171. カーネルの実行時間制限: なし
  172.   
  173. 統合GPU共有ホストメモリ: いいえ
  174.   
  175. ホストページロックメモリマッピングをサポート: はい
  176.   
  177. サーフェスの配置要件: はい
  178.   
  179. デバイスはECCをサポートしています: 無効
  180.   
  181. デバイスは統合アドレス指定 (UVA) をサポートしています: はい
  182.   
  183. デバイスはコンピューティングプリエンプションをサポートしています: はい
  184.   
  185. 協調カーネル起動をサポート: はい
  186.   
  187. マルチデバイスCo-opカーネル起動をサポート: はい
  188.   
  189. デバイス PCI ドメイン ID / バス ID / ロケーション ID: 0 / 0 / 11
  190.   
  191. 計算モード:
  192.   
  193. <  デフォルト(複数のホストスレッドが同時にデバイスで ::cudaSetDevice() を使用できます) >   
  194.   
  195. deviceQuery、CUDAドライバー= CUDART 、CUDA ドライバーバージョン= 10.0 、CUDA ランタイムバージョン= 10.0 NumDevs = 1   
  196.   
  197. 結果=合格  
  198.   
  199. 結果= PASSであり、テスト中にエラーが報告されないため、テストが合格したことを示します。

3.3 cuDNNをインストールする

cuDNN は NVIDIA CUDA® Deep Neural Network ライブラリの略で、ディープ ニューラル ネットワークの基本操作専用に NVIDIA が設計した GPU ベースのアクセラレーション ライブラリです。 cuDNN は、ディープ ニューラル ネットワークにおける標準プロセスの高度に最適化された実装を提供します。

  1. インストール パッケージをダウンロードします: https://developer.nvidia.com/rdp/cudnn-download
  2.    
  3. 注意: ダウンロードする前に、NVIDIA 開発者プログラムに登録する必要があります。

  1. ご自身の環境に合わせて、ダウンロードするバージョンを選択してください。このバージョンでは認証が必要であり、ブラウザ経由でのみダウンロードしてクラウド ホストにアップロードできます。
  2.   
  3. インストール:
  4.   
  5. #rpm -ivh libcudnn7-7.4.2.24-1.cuda10.0.x86_64.rpm libcudnn7-devel-7.4.2.24-1.cuda10.0.x86_64.rpm libcudnn7-doc-7.4.2.24-1.cuda10.0.x86_64.rpm
  6.   
  7. 準備中... ################################### [100%]
  8.   
  9. アップグレード/インストール中...
  10.   
  11. 1:libcudnn7-7.4.2.24-1.cuda10.0 ################################ [ 33%]
  12.   
  13. 2:libcudnn7-devel-7.4.2.24-1.cuda10################################### [67%]
  14.   
  15. 3:libcudnn7-doc-7.4.2.24-1.cuda10.0################################### [100%]
  16.   
  17. cuDNN を検証します。
  18.   
  19. # cp -r /usr/src/cudnn_samples_v7/ $HOME
  20.   
  21. # cd $HOME/cudnn_samples_v7/mnistCUDNN
  22.   
  23. # クリーンにする && 作る
  24.   
  25. rm -rf *o
  26.   
  27. rm -rf mnistCUDNN
  28.   
  29. /usr/ローカル/cuda/bin/nvcc -ccbin g++ -I/usr/ローカル/cuda/include -IFreeImage/include -m64 -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 -gencode arch=compute_50,code=sm_50 -gencode arch=compute_53,code=sm_53 -gencode arch=compute_53,code=compute_53 -o fp16_dev.o -c fp16_dev.cu
  30.   
  31. g++ -I/usr/ローカル/cuda/include -IFreeImage/include -o fp16_emu.o -c fp16_emu.cpp
  32.   
  33. g++ -I/usr/ローカル/cuda/include -IFreeImage/include -o mnistCUDNN.o -c mnistCUDNN.cpp
  34.   
  35. /usr/ローカル/cuda/bin/nvcc -ccbin g++ -m64 -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 -gencode arch=compute_50,code=sm_50 -gencode arch=compute_53,code=sm_53 -gencode arch=compute_53,code=compute_53 -o mnistCUDNN fp16_dev.o fp16_emu.o mnistCUDNN.o -I/usr/ローカル/cuda/include -IFreeImage/include -LFreeImage/lib/linux/x86_64 -LFreeImage/lib/linux -lcudart -lcublas -lcudnn -lfreeimage -lstdc++ -lm
  36.   
  37. # ./mnistCUDNN
  38.   
  39. cudnnGetVersion() : 7402、cudnn.hからのCUDNN_VERSION : 7402 (7.4.2)
  40.   
  41. ホストコンパイラバージョン: GCC 4.8.5
  42.   
  43. お使いのマシンにはCUDA 対応デバイスが 1 つあります:
  44.   
  45. デバイス 0: SMS 8 機能 6.1、SmClock 1480.5 Mhz、MemSize (Mb) 5059、MemClock 3504.0 Mhz、Ecc=0、boardGroupID=0
  46.   
  47. デバイス0を使用
  48.   
  49. 単精度のテスト  
  50.   
  51. 画像データを読み込んでいます/one_28x28.pgm
  52.   
  53. 順方向伝播を実行しています...
  54.   
  55. cudnnGetConvolutionForwardAlgorithm をテストしています...
  56.   
  57. 最速のアルゴリズムAlgo 1です
  58.   
  59. cudnnFindConvolutionForwardAlgorithm をテストしています...
  60.   
  61. ^^^^アルゴリズム 0CUDNN_STATUS_SUCCESS: 0 メモリを必要とする0.036864時間
  62.   
  63. ^^^^アルゴリズム 1CUDNN_STATUS_SUCCESS: 0.044032時間、 3464 メモリが必要
  64.   
  65. ^^^^アルゴリズム 2CUDNN_STATUS_SUCCESS: 0.053248時間、 57600 メモリが必要
  66.   
  67. ^^^^アルゴリズム 4CUDNN_STATUS_SUCCESS: 0.116544時間、207360 メモリが必要
  68.   
  69. ^^^^ Algo 7CUDNN_STATUS_SUCCESS: 0.181248時間、2057744 メモリが必要
  70.   
  71. Softmaxから得られる重み:
  72.   
  73. 0.0000000 0.9999399 0.0000000 0.0000000 0.0000561 0.0000000 0.0000012 0.0000017 0.0000010 0.0000000
  74.   
  75. 画像データを読み込んでいます/three_28x28.pgm
  76.   
  77. 順方向伝播を実行しています...
  78.   
  79. Softmaxから得られる重み:
  80.   
  81. 0.0000000 0.0000000 0.0000000 0.9999288 0.0000000 0.0000711 0.0000000 0.0000000 0.0000000 0.0000000
  82.   
  83. 画像データを読み込んでいます/five_28x28.pgm
  84.   
  85. 順方向伝播を実行しています...
  86.   
  87. Softmaxから得られる重み:
  88.   
  89. 0.0000000 0.0000008 0.0000000 0.0000002 0.0000000 0.9999820 0.0000154 0.0000000 0.0000012 0.0000006
  90.   
  91. 分類結果: 1 3 5
  92.   
  93. テスト合格!
  94.   
  95. 精度のテスト単精度での計算
  96.   
  97. 画像データを読み込んでいます/one_28x28.pgm
  98.   
  99. 順方向伝播を実行しています...
  100.   
  101. cudnnGetConvolutionForwardAlgorithm をテストしています...
  102.   
  103. 最速のアルゴリズムAlgo 1です
  104.   
  105. cudnnFindConvolutionForwardAlgorithm をテストしています...
  106.   
  107. ^^^^アルゴリズム 0CUDNN_STATUS_SUCCESS: 0 メモリを必要とする0.032896時間
  108.   
  109. ^^^^アルゴリズム 1CUDNN_STATUS_SUCCESS: 0.036448時間、 3464 メモリが必要
  110.   
  111. ^^^^アルゴリズム 2CUDNN_STATUS_SUCCESS: 0.044000時間、 28800 メモリが必要
  112.   
  113. ^^^^アルゴリズム 4CUDNN_STATUS_SUCCESS: 0.115488時間、207360 メモリが必要
  114.   
  115. ^^^^ Algo 7CUDNN_STATUS_SUCCESS: 0.180224時間、 2057744 メモリが必要
  116.   
  117. Softmaxから得られる重み:
  118.   
  119. 0.0000001 1.0000000 0.0000001 0.0000000 0.0000563 0.0000001 0.0000012 0.0000017 0.0000010 0.0000001
  120.   
  121. 画像データを読み込んでいます/three_28x28.pgm
  122.   
  123. 順方向伝播を実行しています...
  124.   
  125. Softmaxから得られる重み:
  126.   
  127. 0.0000000 0.0000000 0.0000000 1.0000000 0.0000000 0.0000714 0.0000000 0.0000000 0.0000000 0.0000000
  128.   
  129. 画像データを読み込んでいます/five_28x28.pgm
  130.   
  131. 順方向伝播を実行しています...
  132.   
  133. Softmaxから得られる重み:
  134.   
  135. 0.0000000 0.0000008 0.0000000 0.0000002 0.0000000 1.0000000 0.0000154 0.0000000 0.0000012 0.0000006
  136.   
  137. 分類結果: 1 3 5
  138.   
  139. テスト合格!
  140.   
  141. テスト合格!テスト中にエラーは報告されず、テストが合格したことが示されました。

3.4 TensorFlowをインストールする

  1. # pip3 インストール--upgrade setuptools==30.1.0  
  2.  
  3. # pip3 tf-nightly-gpu をインストールします
  4.  
  5. 検証テスト:
  6.  
  7. 次の短いプログラム コードを Python 対話型シェルに入力します。
  8.  
  9. # パイソン
  10. テンソルフローをtfとしてインポートする
  11. hello = tf.constant( 'こんにちは、TensorFlow!' )
  12. セッション = tf.Session()
  13. 印刷(sess.run(hello))
  14.  
  15. システムが次のように出力した場合、TensorFlow プログラムの作成を開始する準備が整っています。
  16.  
  17. こんにちは、TensorFlow!
  18.  
  19. 同時に、nvidia-smi コマンドを使用して、現在のグラフィック カードの処理タスクを確認します。

3.5 TensorBoard可視化ツールをインストールする

TensorBoard を使用すると、TensorFlow グラフを表示したり、グラフによって生成された定量的なメトリックをプロットしたり、追加データ (渡された画像など) を表示したりできます。 pip 経由で TensorFlow をインストールすると、TensorBoard も自動的にインストールされます。

  1. バージョンを確認します:
  2.  
  3. # pip3 テンソルボードを表示
  4.  
  5. 名前: テンソルボード
  6.  
  7. バージョン: 1.12.2
  8.  
  9. 要約: TensorBoardを使用すると、TensorFlowを観察できます
  10.  
  11. ホームページ: https://github.com/tensorflow/tensorboard
  12.  
  13. 著者: Google Inc.
  14.  
  15. 著者メールアドレス: [email protected]
  16.  
  17. ライセンス: Apache 2.0
  18.  
  19. 場所: /usr/lib/python2.7/site-packages
  20.  
  21. 必要なもの: protobuf、numpy、futures、grpcio、wheel、markdown、werkzeug、six
  22.  
  23. 必須- ​​:
  24.  
  25. サービスを開始します:
  26.  
  27. # テンソルボード--logdir /var/log/テンソルボード.log  
  28.  
  29. TensorBoard 1.13.0a20190107 ( http://GPU-TF:6006) (終了するにはCTRL+C を押してください)
  30.  
  31. プロンプトに従ってブラウザにhttp://server IP:6006と入力します。

3.6 Jupyterをインストールする

Jupyter は、ライブ コード、数式、視覚化、マークダウンをサポートし、文芸的なプログラム ドキュメントを簡単に作成して共有できるインタラクティブなノートブックです。一般的には、データのクリーニングと変換、数値シミュレーション、統計モデリング、機械学習などに使用されます。

  1. インストール:
  2.  
  3. # sudo pip3 jupyter をインストール
  4.  
  5. 設定ファイルを生成します:
  6.  
  7. # jupyterノートブック--generate-config  
  8.  
  9. デフォルト設定次の場所に書き込みます: /root/.jupyter/jupyter_notebook_config.py
  10.  
  11. Jupyter パスワードを生成します:
  12.  
  13. # パイソン
  14.  
  15. Python 3.6.5 (デフォルト、 2019 年 1 月 15 日、 02:51:51)
  16.  
  17. [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] Linux
  18.  
  19. 「ヘルプ」 「著作権」 「クレジット」と入力してください または  "ライセンス"  詳細についてはこちらをご覧ください。
  20.  
  21. >>> notebook.authからpasswd をインポートします。
  22.  
  23. >>> パスワード()
  24.  
  25. パスワードを入力してください:
  26.  
  27. パスワードを確認してください:
  28.  
  29. 'sha1:6067bcf7350b:8407670bb3f94487c9404ed3c20c1ebf7ddee32e'  
  30.  
  31. >>>
  32.  
  33. 生成されたハッシュ文字列を Jupyter 構成ファイルに書き込みます。
  34.  
  35. # vim /root/.jupyter/jupyter_notebook_config.py

  1. サービスを開始する
  2.  
  3. # jupyterノートブック--allow-root --ip='192.168.66.11'  
  4.  
  5. ブラウザログイン

  1. パスワードを入力してログインすると、通常通りアクセスできます。
  2.  
  3. テストタスクを実行します。
  4.  
  5. TensorFlowデモサンプルを実行する
  6.  
  7. Jupyter で新しい HelloWorld の例を作成します。コードは次のようになります。
  8.  
  9. テンソルフローをtfとしてインポートする
  10.  
  11. # TensorFlow を使用したシンプルな Hello World
  12.  
  13. #定数オペレーションを作成する
  14.  
  15. # オペレーションデフォルトグラフノードとして追加されます
  16.  
  17. #
  18.  
  19. #コンストラクタによって返される値は出力を表す 
  20.  
  21. 定数オペレーション数。
  22.  
  23. hello = tf.constant( 'こんにちは、TensorFlow!' )
  24.  
  25. # tfセッションを開始
  26.  
  27. sess = tf.Session()
  28.  
  29. # オペレーションを実行する
  30.  
  31. 印刷(sess.run(hello))

0x4 概要

ZStack クラウド プラットフォームを使用することで、ディープラーニング プラットフォームを迅速に構築できます。クラウド プラットフォーム自体はそれほど複雑な構成を必要とせず、各種ドライバーやディープラーニング コンポーネントをインストールする場合も物理マシンと変わりません。ドライバーをインストールした後、パフォーマンステストを実行したところ、同じ構成の物理的および論理的パフォーマンスに匹敵するパフォーマンスが得られ、GPU 部分でのパフォーマンスの低下はありませんでした。

上記のソフトウェア環境が準備できたら、複数の GPU を構成し、テンプレートから複数のクラウドホストを作成して 1 対 1 の転送を行うことができます。 ZStack 自体のマルチテナント特性と組み合わせることで、複数の人が互いに影響を与えることなく同じ環境でアプリケーションを開発または実行できるため、真のディープラーニング「クラウド」プラットフォームになります。

<<:  クラウド コンピューティングの開発ではどのような困難に直面しますか?

>>:  Google と IBM がクラウド市場シェアを争う: Amazon と Microsoft はいつまでトップを維持できるか?

推薦する

Baidu の発表に疑問:Baidu が公開したアルゴリズムはどの程度真実なのか?

みなさんこんにちは。私はMuzi Chengzhouです。 SEO を行う際、SEO をうまく行うに...

2018年に注目すべきIoTの大きなトレンド

編集者注: モノのインターネットが 2017 年に最も話題になったテクノロジーの 1 つであることは...

ウェブマスターになるという私の4年間の夢は、決意の欠如によって台無しになった

この記事を書いたとき、私は不安と葛藤を感じました。ここ数年の失敗を記事にまとめて皆さんと共有しようか...

検索エンジン スパイダーのクロールのルールを調べる: 外部リンクはタイムリーですか?

「検索エンジン スパイダーのクロール ルールの調査: スパイダーがリンクをクロールする方法」を書き終...

Youzhanの登録価格の誤解から抜け出し、イベント登録の基本要素を把握する

「Youzhan」という言葉は、1年前にはほとんどの人にとって馴染みのない言葉ではなくなりました。し...

ビットコイン取引ネットワークの謎:取引アカウントは停止されているようだが、まだ停止されていない

[要約] 取引チャネルの変更に加えて、一部のビットコインウェブサイトはすでに人民元市場からの撤退を計...

魏亜と李佳琦は「ネット最安値」を買う余裕がない

Eコマースのライブストリーミングは、マーケティング手法から標準化された販売チャネルへと進化しました。...

外部リンク判定設定の対処方法

百度は以前、「外部リンクの判定について」という記事を発表し、不正行為とみなされる外部リンクを多数詳細...

タオバオアフィリエイトに商品を宣伝してもらう方法 - タオバオアフィリエイトのプロモーションスキル

タオバオの有料プロモーションにおけるダイヤモンドブース、直通列車などのプロモーション料金は年々増加し...

Linux環境でのObject Sの導入「言葉にできない」時代

まず、貢献してくれた Xiqin Gongzi に感謝したいと思います。この記事は主に、Object...

SEOと検索マーケティングは実際には回答マーケティングのゲームをしている

検索マーケティングの最大の欠点は、それが受動的なマーケティング手法であり、他の人があなたのところに来...

検索エンジン最適化パート3

みなさんこんにちは、Snow Leopardです。あっという間に春がやってきて、4月も3分の1が過ぎ...

エッジコンピューティングにおける高精度液体冷却の役割

インターネットが広く普及した初期の頃から今日のハイパーコネクテッド時代に至るまで、私たちが生成するデ...

ユーザーをつなぐクリエイティブマーケティング

ユーザーをつなぐクリエイティブマーケティングユーザー同士を結びつけるクリエイティブなマーケティングと...

最初から最後までウェブサイトのホームページを指す外部リンクがあることが有用であるかどうかを議論することは有用でしょうか?

最近では、多くのウェブマスターがウェブサイトのリンクを構築する際、ホームページの外部リンクの重要性を...