我們知道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顯示卡:
......
虛擬機器內部檢視是否有顯示卡:
# 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 toolkitinstall:
# 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
gpu運算示例**:
#include
#include
// kernel function to add the elements of two arrays
__global__
void add(int n, float *x, float *y)
int main(void)
// 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; }
虛擬機器內編譯執行:#
/usr/local/cuda-9.1/bin/
nvcc add.cu -o add_cuda
# ./add_cuda
# /usr/local/cuda-9.1/bin/nvprof ./add_cuda
執行結果:
從運算結果看出,我們在虛擬機器內部執行的程式確是執行在tesla p4上。之後我們就可以在虛擬機器內部執行深度學習的演算法了。
Ubuntu配置GPU直傳kvm虛擬機器
sudo virt install name ubuntu memory 380000,maxmemory 380000 vcpus 46,maxvcpus 46 os type linux os variant ubuntu18.04 cdrom data ubuntu 18.04.5 live ...
虛擬機器記憶體
xmx10240m 代表最大堆 xms10240m 代表最小堆 xmn5120m 代表新生代 xxsurvivorratio 3 代表eden survivor 3 根據generation collection演算法 目前大部分jvm採用的演算法 一般根據物件的生存週期將堆記憶體分為若干不同的區域...
CentOS7 6中 KVM虛擬機器記憶體 CPU調整
調小虛擬機器記憶體可以動態實現,不用關機 root heyong kvm virsh dominfo test id 7 名稱 test uuid 8f2bb4b7 c7ed 31aa 3676 9fb04923163d os 型別 hvm 狀態 running cpu 4 最大記憶體 120248...