Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

OpenStackを使用したGPU仮想化IaaS環境 事例紹介

330 views

Published on

OpenStackを使用した仮想化環境の構築方法と、構築時・運用時のトラブルシューティングを紹介します。

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

OpenStackを使用したGPU仮想化IaaS環境 事例紹介

  1. 1. OpenStackを使用した GPU仮想化IaaS環境 構築事例紹介 日本仮想化技術株式会社
  2. 2. アジェンダ • 概要 • PCIパススルー/NVIDIA GRID 共通の構築ポイント • PCIパススルー利用時の構築ポイント • NVIDIA GRID利用時の構築ポイント • トラブルシューティング
  3. 3. 概要
  4. 4. 概要 • 昨今、人工知能やVRコンテンツ等の発達によりGPUリソース の需要が高まっている • GPU仮想化技術をOpenStackへ取り入れることで、GPUリソー スを手軽に割り出すことが可能 • インスタンスとしてGPUリソースを利用者へ提供 • 必要なときにGPU環境を用意することができる • OpenStackでGPUを使用するための2つのアプローチ方法 • PCIパススルー方式 • NVIDIA GRID方式
  5. 5. PCIパススルー利用時の構成図 OpenStackサーバー群 Computeサーバー VM ゲストOS アプリ ホストOS KVM ハードウェア 物理GPU1 VM …… GPUドライバー 物理GPU2 ゲストOS アプリ GPUドライバー …… PCIパススルー Neutron Horizon Open vSwitch Nova Glance Cinder MySQL Keystone RabbitMQ
  6. 6. NVIDIA GRID利用時の構成図 OpenStackサーバー群 Neutron Horizon Open vSwitch Nova Glance Cinder MySQL Keystone RabbitMQ Computeサーバー VM ゲストOS アプリ OS KVM NVIDIA GRID ハードウェア GPU vGPU VM ゲストOS アプリ vGPU …… ※ OpenStackの詳細な構成図は省略
  7. 7. PCIパススルー利用時のメリット・デメリット <メリット> • インスタンスが物理GPUを専有できる <デメリット> • 同時使用したいインスタンスの数だけ物理GPUが必要 • 物理GPUはホストOSの管理外となる
  8. 8. NVIDIA GRID利用時のメリット <メリット> • 1つのGPUを複数インスタンスで共有させるため、ハードウェ アを集約することができる <デメリット> • NVIDIA GRIDに対応するGPUが必要 • GRIDライセンスが別途必要
  9. 9. 構築の流れ • ホストマシンへRed Hat Enterprise Linuxをインストール • 初期設定 • IOMMUの有効化(PCIパススルー利用時のみ) • nouveauの無効化 • NVIDIAドライバーのインストール(NVIDIA GRID利用時のみ) • OpenStackの構築 • Packstack または Red Hat Openstack Platform にて構築 • NVIDIA vGPU Softwareのインストール(NVIDIA GRID利用時のみ) • NVIDIA GRIDライセンスサーバーの構築(NVIDIA GRID利用時のみ) • ライセンスサーバーの構築方法については以下公式ドキュメントを参照 https://docs.nvidia.com/grid/ls/index.html • OpenStack の設定 • nova.conf の編集 • フレーバーの作成 • インスタンスイメージの作成、登録
  10. 10. PCIパススルー/NVIDIA GRID 共通の構築ポイント
  11. 11. nouveauの無効化 • デフォルトの状態ではLinux標準のグラフィックドライバ nouveauが読み込まれるため、それを無効化 • GRUB2を編集し以下のカーネルパラメータを追加 カーネル起動パラメーターの編集 $ sudo vi /etc/default/grub -------- ### 編集例 ### GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet modprobe.blacklist=nouveau" -------- GRUBへの適用 $ sudo grub2-mkconfig -o /etc/grub2.cfg ※ 設定は次回OS起動時より有効になります 追加
  12. 12. インストールするNVIDIAドライバー • PCIパススルーの場合 • 通常のNVIDIAドライバーを使用します。ホストマシンにはインストール不要 ( https://www.nvidia.co.jp/Download/index.aspx?lang=jp ) ホストマシン:不要 インスタンス(Linux):通常のLinux版NVIDIAドライバー インスタンス(Windows 10):通常のLinux版NVIDIAドライバー • NVIDIA GRIDの場合 • 使用するドライバー異なるため注意。ドライバーはNVIDIA Enterpriseサイトのライセ ンスポータルにてダウンロード可能 ( http://nvid.nvidia.com/dashboard ) ※1 • NVIDIA vGPU software 9.0 の場合以下のインストーラーを使用 ホストマシン:NVIDIA-Linux-x86_64-430.27-vgpu-kvm.run ※2 インスタンス(Linux):NVIDIA-Linux-x86_64-430.30-grid.run インスタンス(Windows 10):431.02_grid_win10_server2016_server2019_64bit_international.exe ※1 90日評価版ライセンスは以下URLより取得可能 https://www.nvidia.co.jp/object/grid-evaluation-jp.html ※2 ダウンロードするファイルが異なるため注意
  13. 13. PCIパススルー利用時の設定ポイント
  14. 14. • GPUカードより仮想マシンのメモリへアクセスする際のアドレ スをマッピングさせるためIOMMUを有効化 • GRUB2を編集し、nouveauドライバーの無効化にくわえ、さら に以下のカーネルパラメータを追加 IOMMUの有効化 起動パラメーターの編集 $ sudo vi /etc/default/grub -------- ### 編集例 ### GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet modprobe.blacklist=nouveau intel_iommu=on iommu=pt" -------- GRUBへの適用 $ sudo grub2-mkconfig -o /etc/grub2.cfg ※ 設定は次回OS起動時より有効になります 追加
  15. 15. IOMMUの有効化反映確認 • 再起動後、IOMMUが正しく有効化されているか確認 $ dmesg |grep -i iommu ### 出力例 [ 0.000000] DMAR: IOMMU enabled [ 0.111093] DMAR-IR: IOAPIC id 1 under DRHD base 0xfbffc000 IOMMU 0 [ 0.111095] DMAR-IR: IOAPIC id 2 under DRHD base 0xfbffc000 IOMMU 0
  16. 16. PCIベンダーIDとデバイスIDの確認 • GPUのPCIベンダーIDとデバイスIDを確認 • このIDは後ほどnova.confの設定を変更する際に使用します # lspci |grep NVIDIA 03:00.0 3D controller: NVIDIA Corporation GV100GL [Tesla V100 PCIe 32GB] (rev a1) # lspci -n |grep 03:00 03:00.0 0302: 10de:1db6 (rev a1) ※ この例ではベンダーIDは10de、デバイスIDは1db6となります PCIバス番号
  17. 17. nova.confの設定変更 nova.confのいくつかの設定をテキストエディタで編集 • enable_filters filter_scheduler セクションの enabled_filters へ PciPassthroughFilter を追記します <設定例> [filter_scheduler] enabled_filters=RetryFilter,AvailabilityZoneFilter,RamFilter,DiskFilter,ComputeFilter, ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,Server GroupAffinityFilter,CoreFilter,PciPassthroughFilter 追加
  18. 18. nova.confの設定変更 • alias および passthrough_whitelist pciセクションにaliasとpassthrough_whitelist を追記します。その際、 先ほど調べたPCIベンダーIDとデバイスIDを私用します。エイリアス名 は任意の名前を設定します。 ### 設定例 ### この例ではベンダーIDは 10de 、デバイスIDは 1db6 で 、エイリアス名(任意)は v100 としています。 [pci] alias = { "vendor_id":"10de", "product_id":"1db6", "device_type":"type-PCI", "name":"v100" } passthrough_whitelist = [{ "vendor_id":"10de", "product_id":"1db6" },{ "vendor_id":"10de", "product_id":"1b02" }]
  19. 19. フレーバーの作成 以下の方法にてフレーバーを作成 <作成方法> • OpenStack Dashboard ログイン後、[管理]-[コンピュート]-[フレーバー] の順に メニューをクリックし、[フレーバーの作成]ボタンをクリック • スペック情報等を入力しフレーバーを作成します • 作成したフレーバーの「メタデーターの更新」ボタンをクリックします • [カスタム]欄にキー名「pci_passthrough:alias」を入力し [+] ボタンをクリック します • [選択済みのメタデータ]にキーが追加されたら、値に「エイリアス名:デバイス 数」を入力し、[更新]ボタンをクリックします • たとえば、エイリアス名が V100、使用するGPUデバイス数は1つの場合、設 定する値は V100:1 となります
  20. 20. PCIパススルー利用時の設定ポイント フレーバー設定例 メタデータの追加
  21. 21. NVIDIA GRID利用時の設定ポイント
  22. 22. 利用できるvGPUタイプの確認 vGPUで使用できるフレームバッファー数、ディスプレイ数、解 像度等はあらかじめ定義されているため、使用しているGPUで 利用できるvGPUのタイプ名を確認 cat /sys/bus/pci/devices/0000:03:00.0/mdev_supported_types/nvidia-*/name GRID V100D-1Q GRID V100D-2Q GRID V100D-4Q GRID V100D-8Q GRID V100D-16Q GRID V100D-32Q … 詳細はNVIDIA公式ドキュメントの「1.4. Supported GPUs」を参照してください。 https://docs.nvidia.com/grid/latest/grid-vgpu-user-guide/index.html#supported-gpus-grid-vgpu PCIバス番号(この例では 0000:03:00.0 )
  23. 23. vGPUデバイス名の確認 vGPUタイプ名とOS上のデバイス名は異なるため、それぞれの vGPUタイプに紐付くデバイス名を確認 $ ls -l /sys/bus/pci/devices/0000:03:00.0/mdev_supported_types/ total 0 drwxr-xr-x. 3 root root 0 Oct 4 11:18 nvidia-180 drwxr-xr-x. 3 root root 0 Oct 4 11:18 nvidia-181 drwxr-xr-x. 3 root root 0 Oct 4 11:18 nvidia-182 drwxr-xr-x. 3 root root 0 Oct 4 11:18 nvidia-183 drwxr-xr-x. 3 root root 0 Oct 4 11:18 nvidia-184 drwxr-xr-x. 3 root root 0 Oct 4 11:18 nvidia-185 drwxr-xr-x. 3 root root 0 Oct 4 11:18 nvidia-186 …
  24. 24. nova.confの設定変更 • vGPUデバイスの追加 インスタンスへ割り当てるvGPUのデバイス名を指定します ### 設定例 ### この例では nvidia-182 を指定します。 ############ [devices] enabled_vgpu_types = nvidia-182
  25. 25. フレーバーの作成 以下の方法にてフレーバーを作成します。 <作成方法> • OpenStack Dashboard ログイン後、[管理]-[コンピュート]-[フレーバー] の順に メニューをクリックし、[フレーバーの作成]ボタンをクリック • スペック情報等を入力しフレーバーを作成します • 作成したフレーバーの「メタデーターの更新」ボタンをクリックします • [カスタム]欄にキー名「resources:VGPU」を入力し [+] ボタンをクリックしま す • [選択済みのメタデータ]にキー追加されたら、値に 1 を入力し[更新]ボタンをク リックします
  26. 26. フレーバーの作成 フレーバー設定例 メタデータの追加
  27. 27. トラブルシューティング
  28. 28. フレームレート制限の解除(NVIDIA GRID) • NVIDIA GRID環境ではパフォーマンスのバランスをとるためフレー ムレート制限(FRL)が有効になっている • この場合、フレームレートは最大60fpsとなるためベンチマーク結果 等に影響が出る恐れがある • インスタンス側にて60fps以上の性能が必要な場合、以下の手順にて FRLを無効化する <設定方法> # echo "frame_rate_limiter=0" > /sys/bus/mdev/devices/[vgpu-id]/nvidia/vgpu_params vgpi-id: vgpuのデバイスID。 nvidia-smi vgpu -q 0 詳細は以下のNVIDIAドキュメントを確認してください https://docs.nvidia.com/grid/9.0/grid-vgpu-release-notes-red-hat-el-kvm/index.html#lower-vgpu-benchmarks
  29. 29. CPUピニング • OpenStackではシステムパフォーマンス向上のため、デフォルトで はインスタンスの仮想CPUが使用する物理CPUコアは不定となって いる • インスタンス起動中でも状況に応じて使用するCPUコアの切替が発生 • 3Dレンダリングなどリアルタイム要素の高い処理を行う場合、使用 するCPUコアを固定化(ピニング)することでパフォーマンスが向 上する場合がある • CPUピニングはフレーバーにて設定することが可能(詳細は以下ド キュメントを参照) • https://docs.openstack.org/nova/queens/admin/cpu- topologies.html#customizing-instance-cpu-pinning-policies • https://access.redhat.com/documentation/ja- jp/red_hat_openstack_platform/8/html/instances_and_images_guide/ch- cpu_pinning
  30. 30. RDP接続時にグラフィカル性能が出ない • RDP接続にてインスタンスのデスクトップ画面を接続した場合、デ フォルト設定ではGPUのハードウェアエンコーディングが使用でき ず、GPUの性能を十分に活かすことができない • RDP 10よりH.264/AVCコーデックを使用できるため、グループポ リシーにてRDPの設定変更を行うことで回避することが可能 • 参考資料:https://techcommunity.microsoft.com/t5/Enterprise-Mobility- Security/Remote-Desktop-Protocol-RDP-10-AVC-H-264-improvements- in-Windows/ba-p/249588 • ゲーミング用途のリモートデスクトップツールにて回避することも 可能 • Parsec : https://parsecgaming.com/

×