在IBM公有云上平台随心所欲的构建GPU虚拟服务器
如何在IBM Cloud上使用物理机自建带GPU的虚拟机
最近准备使用GPU的计算资源,听说IBM云平台上的裸机服务器性能不错,于是在IBM公有云平台上注册了一个账号(账号注册还是比较简单的,三步搞定,也是大家一看就明白的操作,我这里就不废话了)。 由于IBM云平台上的基础架构设施,诸如物理机,虚拟机,当然包括GPU资源的这些都属于基础架构一层,他们订购的话需要账号绑定信用卡,所以我联系了IBM相关人员,让他把我加到他们的一个POC测试账号下,这样就可以免费搞一个一个月的机器来使用了。
我们现在有几个项目,想在多种环境下测试多种GPU卡的性能,为最后的选型做准备,IBM平台上的物理机有多个GPU卡型号可选,但是虚拟机就一个型号(V100)而且在某些数据中心,GPU卡的资源还比较紧缺。由于我们想测试多个型号的GPU虚拟机,所以选择了在带GPU的物理机器上自建虚拟机来实现,然后再把GPU资源划分给虚拟机
在IBM云平台上下单含有GPU卡的物理机,我们下面所做的安装设置都是使用Passthrough方式访问的GPU卡,也就是说,一个GPU卡限定只给到单个虚拟机使用,如果你需要在同一台物理机上创建多个含有GPU卡的虚拟机的话,可以在下单物理机的时候选择多张GPU卡。
IBM云平台本身也提供GPU能力的虚拟机,但是有些时候,客户可能需要指定型号的GPU卡,这个时候IBM云平台不一定能提供到你要求的GPU卡的虚拟机,这种情况你可以使用物理机自己构建。
由于现阶段IBM云平台上单个物理机最多只支持两张GPU卡,所以创建的虚拟机也最多仅支持两张GPU卡。IBM在今年下半年会支持多张GPU卡的物理机推出,同时也会推出更多GPU卡的型号,如T4等等,到时单台物理机器可最多容纳8张GPU卡,大大提升了IBM云平台上GPU的能力。
前提:已经在IBM云平台上部署有带GPU卡的物理机
这里我们使用KVM来构建虚拟机,所以安装的是Linux操作系统,我下面的KVM相关操作都是在CentOS7的系统上来进行的。
启用passthrough直通模式:
物理机打开IOMMU功能。编辑配置文件: /etc/default/grub , 在GRUB_CMDLINE_LINUX = “ xxx” 的值中,添加一项intel_iommu=on, 然后运行grub2-mkconfig >/boot/grub2/grub.cfg将配置更新到启动文件,之后reboot,使其生效。这个是内核参数,只有重启才会重新加载内核才能生效。
如果物理机没有安装nvidia驱动的话,比较好处理:直接可以使用
如果已经在物理机上面安装了nvidia驱动的话,在上述过程之前,需要首先将设备从物理机解除绑定,才能够直通给VM,所以还需要下面的一些前期工作:
echo "10de 15f8" >/sys/bus/pci/drivers/pci-stub/new_id
说明:“10de 15f8”这个号是设备ID,在lspci -vnn |grep -i nvidia 的时候,最后一项就是,第一个号码(81:00.0)是PCI ID
echo 0000:81:00.0> /sys/bus/pci/devices/0000:81:00.0/driver/unbind
说明:“0000:81:00.0”为PCI的ID number
echo 0000:81:00.0 > /sys/bus/pci/drivers/pci-stub/bind
说明:“0000:81:00.0”是PCI的ID number
如果没有lspci命令,请执行下面命令安装:
Yum install pciutils
如果上述均执行成功,恭喜你,已经可以在VM中像在物理机使用GPU一样了。
在宿主机上检查并安装KVM虚拟软件:
- 首先验证CPU是否支持虚拟化,输入有vmx或svm就支持,支持虚拟化则就支持KVM
cat /proc/cpuinfo | egrep 'vmx|svm'
有输出,则说明机器支持虚拟化,否则提交工单要求后台启用虚拟化(这一步基本不会出现)
- 查看是否加载KVM,输出如下
[[email protected] ~]# lsmod | grep kvm
kvm_intel 170086 0
kvm 566340 1 kvm_intel
irqbypass 13503 1 kvm
如果没有加载则执行以下命令加载KVM
modprobe kvm
- 关闭selinux
#setenforce 0
编辑selinux配置文件
vim /etc/sysconfig/selinux
SELINUX=disabled
关闭SELINUX,以免机器重启后仍然生效
- 安装KVM相关软件包
yum install qemu-kvm qemu-img \
virt-manager libvirt libvirt-python virt-manager \
libvirt-client virt-install virt-viewer -y
说明:
qemu-kvm: KVM模块
libvirt: 虚拟管理模块
virt-manager: 图形界面管理虚拟机
virt-install: 虚拟机命令行安装工具
- 启动libvirt并设置开机自启动
systemctl start libvirtd
systemctl enable libvirtd
- 手动配置Bridge网卡
安装网桥管理工具包:bridge-utile
yum install bridge-utils -y
编辑网桥设备,在/etc/sysconfig/network-scripts/目录下创建ifcg-br0文件(内网),并写入以下内容
DEVICE="br0"
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTO=none
NM_CONTROLLED=no
IPADDR=10.x.x.x
NETMASK=255.255.255.192
(此处的ip地址和子网掩码是bond0里面的IP地址和掩码,我们下面需要修改ifcfg-bond0文件)
Ifcfg-bond0文件内容如下(将原先的ip地址删除,添加BRIDGE=br0一行):
再按照上面步骤创建br1网桥(供外网通讯使用)。
- 使用图形化界面安装虚拟机
先建立两个目录分别用来存放iso文件和生成的qocow2磁盘文件
mkdir /data/iso
mkdir /data/images
IBM云平台默认提供的操作系统没有安装相应的图像软件包,所以需要自己安装并设置一下,
A.)yum groupinstall -y "GNOME Desktop" "Graphical Administration Tools" //安装GNOME桌面.
B.)systemctl set-default graphical.target //设置图形模式为默认界面,即下次开机自动启用图形界面.
重启机器,使之进入图形界面。
通过IPMI访问图形界面(或启动VNC访问图形界面),此处介绍如何使用IPMI访问图形界面
一、如果使用自己本机访问IPMI,则需要先拨通IBM云平台的v*n:
打开浏览器,输入地址:https://v*n.tok02.softlayer.com/
(此中的tok02可以换成IBM其他数据中心的简称,如dal05,hkg01等等)
注:可能需要使用IE浏览器打开上面链接,否则无法输入用户名和密码(java applet的原因)
成功登录后,您就可以访问IBM云主机的内网和管理网络,(IPMI需要访问IBM物理机的管理网络。
二、如果你在物理机所在的同一账号下恰巧有一台windows的虚拟机(物理机当然也可),那么你可以用这台windows机器作为跳板机再连接IPMI,这样,你本机就不需要连接v*n了,这样操作的顺畅度也会快一些(两个机器之间都在同一个内网中,延时和性能都会好太多)
然后,使用浏览器,输入物理机的管理ip地址,登录IPMI。
如何查找物理机的管理ip和密码情况下面介绍:
在IBM云平台上找到你需要访问的物理机,在首页,点击设备,进入设备List
找到所要机器,并点击进入详细页面:
点击左侧的远程管理获取管理IP和密码:
红色框中是我们需要的内容。
登入IPMI后的页面类似如下:
然后点击Remote Control à Console Redirectionà Launch Console即可打开物理机的console(打开console有多种方式,可以是java applet,也可以是HTML5方式),打开之后,下面就和本地Linux操作一致了。
进入KVM图形化管理窗口(如果你对KVM命令行相当熟悉,请忽略下面的KVM他图形化操作)
[[email protected] ~]# virt-manager
本地安装介质
选择浏览
这里我们选择左下角的加号来新建一个存储池(不创建也可以,这样会安装到默认的位置,我这里的默认位置磁盘空间不够,因此新建一个存放位置)
创建存储池,名称随便起
目标路径就是前面创建的目录
创建好后,会出现在上面,点击它,然后点击加号,在images存储池里创建一个存储卷
名称随便起,我这里的空间大,就给了100G
点击选择卷
找到/data/iso目录下的iso文件
这里选择自定义存储,就是我们在images存储池里创建的存储卷
然后点击添加硬件,加入第二张网卡和GPU卡,期间,记住网卡MAC地址,以便在配置虚拟机网络的时候,确定哪个网卡是内网,哪个网卡是外网。
检查网卡是否选择了之间创建的网桥设备(br0, br1)
添加Passthrough模式的NVIDIA GPU卡类型是选PCI Host Device,然后找到GPU卡并添加。
点击安装即可开始操作系统的安装(可以是windows,也可以是Linux)
安装完系统之后,进入系统配置网络。
新虚拟机上的网络配置需通过若干步骤来完成。对于公用和专用网络,需要单独的可移植 IP 块。假定您使用的虚拟化产品需要在 VLAN 广播域上有辅助子网,而不路由到 VLAN(无网络标识/网关/广播)子网。如果未计划在虚拟机上使用专用网络,那么只需要公用子网。可移植 IP 块可以直接通过门户网站的销售 -> 添加 IP 地址 进行订购,或者通过公用网络 IP 管理器 进行订购。
获取 IP 块后,可以在虚拟机上配置联网。如果未安装虚拟机,那么可以通过操作系统安装过程来配置公用网络块。此过程是配置公用网络的最快方法。所有网络配置步骤都假定第一个网络接口是专用网络,第二个网络接口是公用网络。
配置网络对于每种操作系统各不相同。您可以找到有关为以下操作系统配置网络的详细信息。注:分组在一起的操作系统具有相同的网络配置。
网络配置需要公共和专用 IP 块的以下信息。这些信息可在门户网站的公用网络 -> IP 管理器 下的“公共 IP 块”以及专用网络 -> IP 管理器 下的“专用 IP 块”中找到。
Windows系统配置网络连接:
示例专用 IP 块 - 10.0.0.0/29
IP 地址 - 10.0.0.2
网关 - 10.0.0.1
子网掩码 - 255.255.255.248
打开网络配置
转至“开始”菜单 > 设置 > 控制面板
打开网络和共享中心,然后单击管理网络连接
如果已安装两个网络适配器,那么会看到“本地连接”和“本地连接 2”。
公用网络
以下指示信息提供了通过 Windows 图形界面配置公用网络的详细步骤。
右键单击本地连接 > 属性。
选择 Internet 协议版本 4 (TCP/IPv4) > 属性。
转至常规 > 使用下面的 IP 地址:,然后输入您的公共 IP 地址、子网掩码和网关。
选中使用下面的 DNS 服务器地址:。如果要配置专用网络,请使用以下 DNS 服务器。如果不打算配置专用网络,那么需要提供 DNS 服务器。
首选 DNS 服务器:10.0.80.11
备用 DNS 服务器:10.0.80.12
单击确定。
专用网络
右键单击本地连接 2 > 属性,然后选择 Internet 协议版本 4 (TCP/IPv4) > 属性。
转至常规 > 使用下面的 IP 地址:,输入您的专用 IP 地址和子网掩码,然后单击确定。
再次单击确定以关闭网络配置窗口。
要提供对包含 DNS 服务器的整个专用网络的访问权,您需要向服务器添加定制路径。
转至开始 > 运行,输入“cmd”,然后单击确定。
运行以下命令:注:请将网关地址 (10.0.0.1) 替换为您的专用 IP 块网关。
route add 10.0.0.0 mask 255.0.0.0 10.0.0.1 –p
RedHat、Fedora 和 CentOS网络配置:
在 RedHat、Fedora 和 CentOS 上配置网络是通过手动编辑配置文件来完成的。要手动编辑这些文件,您需要登录到虚拟机。
示例公共 IP 块 - 192.0.2.0/29
IP 地址 - 192.0.2.2
网关 - 192.0.2.1
子网掩码 - 255.255.255.248
示例专用 IP 块 - 10.0.0.0/29
IP 地址 - 10.0.0.2
网关 - 10.0.0.1
子网掩码 - 255.255.255.248
公用网络
公用网络设置包含在以下文件中。您需要使用提供的信息来编辑此文件。请将示例 IP 地址替换为您的公共 IP 块中的 IP 地址。如果此文件不存在,请进行创建。如果存在,请将文件中的所有数据替换为以下信息:
/etc/sysconfig/network-scripts/ ifcfg-eth1
专用网络
专用网络设置包含在以下文件中。您需要使用提供的信息来编辑此文件。请将示例 IP 地址替换为您的专用 IP 块中的正确 IP 地址。如果此文件不存在,请进行创建。如果文件存在,请将文件中的所有数据替换为以下信息:注:专用网络没有缺省路径,因此未定义 GATEWAY。
/etc/sysconfig/network-scripts/ ifcfg-eth0
最后,需要新路径来提供对整个专用网络的专用访问权以包含 DNS 服务器,这可通过编辑以下文件来完成。此文件不存在,因此需要进行创建。注:请将示例中的“10.0.0.1”替换为您的专用子网 IP 网关。
/etc/sysconfig/network-scripts/route-eth0
DNS 配置
主 DNS 配置和辅助 DNS 配置包含在单独的文件中。您需要使用以下信息来编辑该文件。如果此虚拟机无权访问专用网络,那么需要将服务器 IP 替换为要使用的 DNS 服务器的 IP 地址。
vi /etc/resolv.conf
为了使这些更改生效,需要在服务器上重新启动联网。可以通过运行以下命令来重新启动联网:
systemctl restart network
Ubuntu 和 Debian网络配置:
可以通过单个配置文件来配置 Ubuntu 和 Debian 网络。您需要使用以下信息来编辑此配置文件。要编辑此文件,您需要具有对服务器的 root 用户访问权。Ubuntu 的基本安装未提供 root 用户登录。但是,在安装过程中创建的用户可以访问 sudo。如果运行的是 Ubuntu,那么需要使用 sudo 命令来编辑此文件。
示例公共 IP 块 - 192.0.2.0/29
IP 地址 - 192.0.2.2
网关 - 192.0.2.1
子网掩码 - 255.255.255.248
示例专用 IP 块 - 10.0.0.0/29
·IP 地址 - 10.0.0.2 ·网关 - 10.0.0.1 ·子网掩码 - 255.255.255.248
公用和专用网络
使用任何文本编辑器来编辑以下文件,并将示例 IP 地址替换为您的公共和专用 IP 块中的 IP。
/etc/network/interfaces
DNS 配置
主 DNS 配置和辅助 DNS 配置包含在单独的文件中。您需要使用以下信息来编辑此配置文件。如果此虚拟机无权访问专用网络,那么需要将服务器 IP 替换为要使用的 DNS 服务器的 IP 地址。
vi /etc/resolv.conf
为了使这些更改生效,需要在服务器上重新启动联网。可以通过运行以下命令来重新启动网络:
/etc/init.d/network restart
注:根据 RFC1166 和 RFC5737,192.0.2.0/24 将用作公共 IP 文档。因此,不要在服务器上使用这些 IP 地址。