KVM虛擬化與GPU計算的結合實踐

2021-02-21 虛擬化雲計算

我們知道CUDA是由NVIDIA推出的通用並行計算架構,使用該架構能夠在GPU上進行複雜的並行計算。在有些場景下既需要使用虛擬機進行資源的隔離,又需要使用物理GPU進行大規模的並行計算。本文就進行相關的實踐:把NVIDIA顯卡透傳到虛擬機內部,然後使用CUDA平臺進行GPU運算的實踐。

顯卡型號:NVIDIA的Tesla P4

物理主機查看顯卡:

# lspci | grep NVIDIA

81:00.0 3D controller: NVIDIA Corporation Device 1bb3 (rev a1)

#

把pci顯卡從主機上分離:

# virsh nodedev-list

pci_0000_81_00_0

#virsh nodedev-dettach  pci_0000_81_00_0

虛擬機直接指定此pci顯卡:

<devices>

      .

    <hostdev mode='subsystem' type='pci' managed='yes'>

      <source>

        <address domain='0x0000' bus='0x81' slot='0x00' function='0x0'/>

      </source>

      <address type='pci' domain='0x0000' bus='0x00' slot='0x10' function='0x0'/>

    </hostdev>

</devices>

虛擬機內部查看是否有顯卡:

# lspci | grep NVIDIA

00:10.0 3D controller: NVIDIA Corporation Device 1bb3 (rev a1)

#

虛擬機內準備環境:

ubuntu16.04

# apt-get install gcc

# apt-get install linux-headers-$(uname -r)

虛擬機內CUDA Toolkit 9.1 Download:

虛擬機內CUDA Toolkit Install:

# dpkg -i cuda-repo-ubuntu1604-9-1-local_9.1.85-1_amd64.deb

# apt-key add /var/cuda-repo-9-1-local/7fa2af80.pub

# apt-get update

# apt-get install cuda

# apt install nvidia-cuda-toolkit

GPU運算示例代碼:

#include <iostream>

#include <math.h>

// Kernel function to add the elements of two arrays

__global__

void add(int n, float *x, float *y)

{

  for (int i = 0; i < n; i++)

    y[i] = x[i] + y[i];

}

int main(void)

{

  int N = 1<<20;

  float *x, *y;

  // Allocate Unified Memory – accessible from CPU or GPU

  cudaMallocManaged(&x, N*sizeof(float));

  cudaMallocManaged(&y, N*sizeof(float));

  // initialize x and y arrays on the host

  for (int i = 0; i < N; i++) {

    x[i] = 1.0f;

    y[i] = 2.0f;

  }

  // Run kernel on 1M elements on the GPU

  add<<<1, 1>>>(N, x, y);

  // Wait for GPU to finish before accessing on host

  cudaDeviceSynchronize();

  // Check for errors (all values should be 3.0f)

  float maxError = 0.0f;

  for (int i = 0; i < N; i++)

    maxError = fmax(maxError, fabs(y[i]-3.0f));

  std::cout << "Max error: " << maxError << std::endl;

  // Free memory

  cudaFree(x);

  cudaFree(y);

  

  return 0;

}

https://devblogs.nvidia.com/even-easier-introduction-cuda/

虛擬機內編譯運行:

# nvcc add.cu -o add_cuda

# ./add_cuda

# /usr/local/cuda-9.1/bin/nvprof ./add_cuda

運行結果:

從運算結果看出,我們在虛擬機內部運行的程序確是執行在Tesla P4上。之後我們就可以在虛擬機內部運行深度學習的算法了。

-

  關注本公眾號,了解更多關於雲計算虛擬化的知識。


相關焦點

  • 虛擬化--KVM
    一、虛擬化介紹什麼是虛擬化?這時候我們就可以使用虛擬化技術,用這三臺物理伺服器虛擬出60個系統然後分配成開發人員。KVM、vmware與虛擬化是什麼關係?kvm和vmwrae都可看做是一個可以實現虛擬化的軟體。
  • kvm虛擬化介紹
    二、虛擬化 ---KVM 1、虛擬化kvm發展: 2006 年 10 月由以色列的 Qumranet 組織開發的一種新的「虛擬機」方案,並將其貢獻給開源世界 2007 年 2 月於 Linux Kernel-2.6.20 中第一次包含了 KVM
  • Linux虛擬化-KVM-虛擬機安裝
    虛擬機可以使用真機物理硬體,性能高,需要改內核;全虛擬化:直接使用物理硬體,性能高;Vmware:支持仿真虛擬化;xen半虛擬化:REHL5自帶xen,安裝時需要安裝內核rpm -ivh kernel-xen-xxx.rpmkvm 全虛擬化:RHEL6自帶kvmShell是一個命令解釋器,它在作業系統的最外層,負責直接與用戶進行對話,把用戶的輸入解釋給作業系統
  • Kvm --01 虛擬化基礎概念
    虛擬化基礎概念01. 什麼是虛擬化?虛擬化,是指通過虛擬化技術將一臺計算機虛擬為多臺邏輯計算機。為什麼要用虛擬化?2.是x86架構且硬體支持虛擬化技術(如 intel VT 或 AMD-V)的Linux全虛擬化解決方案。3.它包含一個為處理器提供底層虛擬化,可加載的核心模塊kvm.ko(kvm-intel.ko或kvm-AMD.ko)。
  • 虛擬化技術之kvm基礎
    KVM的虛擬化需要硬體支持(如Inter VT技術或者AMD V技術),是基於硬體的完全虛擬化。而Xen早期則是基於軟體模擬的Para-Virtualization,新版本則是基於硬體支持的完全虛擬化。但Xen本身有自己的進程調度器,存儲管理模塊等,所以代碼較為龐大。
  • Kvm虛擬化存儲管理
    一、KVM 存儲虛擬化介紹KVM 的存儲虛擬化是通過存儲池(Storage Pool)和卷(Volume)來管理的。存儲池:kvm通過存儲池管理資源,在主機裡面申請的一塊存儲空間卷:在存儲池裡申請的資源Storage Pool 是宿主機上可以看到的一片存儲空間,可以是多種型;Volume 是在 Storage Pool 中劃分出的一塊空間,宿主機將 Volume 分配給
  • KVM 虛擬化基本原理
    這也是為什麼XEN只支持虛擬化Linux,無法虛擬化windows原因,微軟不改代碼啊。也就說,硬體這層就做了些區分,這樣全虛擬化下,那些靠「捕獲異常-翻譯-模擬」的實現就不需要了。而且CPU廠商,支持虛擬化的力度越來越大,靠硬體輔助的全虛擬化技術的性能逐漸逼近半虛擬化,再加上全虛擬化不需要修改客戶作業系統這一優勢,全虛擬化技術應該是未來的發展趨勢。
  • KVM虛擬化平臺
    本章將介紹部署虛擬化環境、創建虛擬機實例,以及虛擬機的基本管理。(如Intel-VT,AMD-V)實現高性能的虛擬化支持。       下圖簡單描繪了KVM虛擬化架構,在KVM環境中運行的每個虛擬化作業系統都將表現為單個獨立的系統進程。因此它可以很方便地與Linux系統中的安全模塊進行整合(SELinux),可以靈活地實現資源的管理及分配。
  • 淺談GPU虛擬化技術(四)- GPU分片虛擬化
    (圖片來源:https://01.org/sites/default/files/documentation/an_introduction_to_intel_GVT-g_for_external.pdf)  可以從上圖看到vGPU的模擬是通過kvmGT
  • kvm搭建
    技術(CPU要支持查看自己的CPU是否支持全虛擬化虛擬化技術且是64位的)Intel:cat /proc/cpuinfo | grep --color vmxAMD :cat /proc/5、開啟BIOS 虛擬化支持。
  • 容器與虛擬化的結合:淺談「安全容器」技術發展趨勢
    虛擬化級別的隔離已經被各種公有雲的實踐證明,是一種安全的隔離技術。,讓虛擬化直接和應用運維結合,成為雲原生技術的大勢所趨。結合當前安全容器實現中遇到的一些問題,我們可以預見到,未來這項技術發展的幾個走向:需要一個為安全容器而生的輕量級hypervisor ,當前qemu+kvm是主流的虛擬化技術,但因為qemu是為通用的虛擬機而設計的,其體量過於龐大,而 對於安全容器而言,一個模塊化可定製的虛擬化實現尤為重要。
  • Linux虛擬機- KVM虛擬機常用的幾個組件
    前言kvm虛擬機是Linux常用的虛擬機。使用kvm虛擬機都會涉及到QEMU、KVM以及libvirt等組件,還有一些命令行或者圖形工具,比如virsh、virt-manager等。那這幾個是什麼關係呢?
  • 雲計算底層技術之 KVM 初探
    它是作為 Linux kernel 中的一個內核模塊而存在,模塊名為 kvm.ko,也可以看作是一個進程,被內核調度並管理,從 Linux 2.6.20 版本開始被完全正式加入到內核的主幹開發和正式發布代碼中。 KVM 主要用於管理 CPU 和內存的虛擬化,IO 設備的虛擬化則是由 Qemu 來完成。為什麼會有這樣的分工,請繼續往下看。
  • 阿里雲鄭曉:淺談GPU虛擬化技術(第一章)
    自然,隨著應用場景從單一依賴CPU的計算單元的應用擴展到多種體系架構,異構計算場景的應用上來後,對GPU,FPGA,TPU等專業計算晶片也提出了虛擬化和上雲的強烈要求。尤其是最近幾年機器學習、深度學習等領域的快速發展,催生了異構計算場景搬遷上雲的高潮。  那麼這個異構計算應用場景的市場規模有多大呢?異構計算作為機器學習人工智慧的計算載體,先來看看人工智慧前景如何?
  • KVM實驗
    【1】、虛擬機分配4個G內存【2】、開啟虛擬化==============grep &34; /proc/cpuinfo //能夠過濾vmx就說明能夠支持虛擬化iptables -Fsetenforce 0systemctl stop firewalld
  • kvm虛擬化知識梳理
    二、kvm常用命令virsh是kvm虛擬機常用的管理工具,常用的命令如下:1、安裝kvm環境sudo apt-get install qemu-kvm2、導入虛機配置(xml格式配置文件default14、自啟動默認網絡virsh net-autostart default15、徹底刪除虛擬機步驟1)關閉虛擬機:virsh destroy centos2)刪除定義:virsh undefine centos3)刪除虛擬機文件(在/var/lib/libvirtd/下的相關文件)三、kvm
  • Kvm --05 密碼保護:Kvm管理之WebVirtMgr
    前言當Kvm宿主機越來越多,需要對宿主機的狀態進行調控,決定採用WebVirtMgr作為Kvm虛擬化的web管理工具,圖形化的WEB,讓人能更方便的查看Kvm宿主機的情況和操作。部署1)、安裝相關依賴首先要安裝Kvm虛擬化環境,這裡我將WebVirtMgr伺服器和Kvm伺服器放在同一臺機器上部署的,即單機部署。
  • 讀懂 x86 架構 CPU 虛擬化,看這文就夠了 | 贈書
    CPU虛擬化,Intel在硬體層面實現的擴展VMX。> ".globl kvm_vmx_return \n\t" "kvm_vmx_return: " /* Save guest registers, load host registers, keep flags */ … if (kvm_handle_exit(kvm_run, vcpu)) {
  • 讀懂x86 架構 CPU 虛擬化,看這文就夠了|贈書
    作者 | 王柏生、謝廣軍導讀:本文摘自於王柏生、謝廣軍撰寫的《深度探索Linux系統虛擬化:原理與實現》一書,介紹了CPU虛擬化的基本概念,探討了x86架構在虛擬化時面臨的障礙,以及為支持CPU虛擬化,Intel在硬體層面實現的擴展VMX。
  • Centos7安裝KVM虛擬機教程
    KVM --- 全稱是基於內核的虛擬機(Kernel-based Virtual Machine)是一個開源軟體,基於內核的虛擬化技術,實際是嵌入系統的一個虛擬化模塊,通過優化內核來使用虛擬技術,該內核模塊使得 Linux 變成了一個Hypervisor,虛擬機使用 Linux 自身的調度器進行管理。