背景

ZStack所聚焦的IaaS,作为云计算里的底座基石,能够更好的实现物理资源隔离,以及服务器等硬件资源的统一管理,为上层大数据、深度学习Tensorflow等业务提供了稳定可靠的基础环境。

近年来,云计算发展探索出了有别于传统虚拟化、更贴近于业务的PaaS型服务,该类型依赖于docker实现,如K8S等典型的容器云,可以直接从镜像商店下载封装好业务软件的镜像,更加快捷地实现业务部署。

此外,GPU场景也是客户业务的典型场景,相比于CPU的运算特点,在数据分析、深度学习有着明显的优势。

ZStack是如何与容器结合,以IaaS+PaaS的组合拳,为上层业务提供支撑的呢?本篇文章带大家了解一下,如何在ZStack 上部署 centos7.6 虚拟机,在虚拟机里部署docker,以及如何使用nvidia-docker实现在容器里调用GPU的业务场景。

环境

虚机系统:Centos 7.6

虚机内核:Linux 172-18-47-133 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

docker版本:docker-ce 19.03

nvidia-docker版本:nvidia-docker-1.0.11.x86_64

显卡:RTX6000

Cuda版本:10.1

显卡驱动:418

如下图所示:

Part 01

显卡驱动安装

1、下载对应版本的CUDA,并以此安装驱动。CUDA已经紧密结合了NVIDIA,以下驱动在centos、ubuntu上面均可执行,并自带绝大部分NVIDIA型号的显卡驱动,实用性非常强。

wget http://plan.zstack.io/storage/iso/nvidia/cuda_10.1.168_418.67_linux.run

chmod+x http://plan.zstack.io/storage/iso/nvidia/cuda_10.1.168_418.67_linux.run

GPU透传给虚拟机的操作步骤,详见在http://zstack.io官网可搜索到的《GPU实践手册》。

特别提醒:平台CPU模式一定要设置成passthrough!否则后续无法正常调用GPU做任何操作。

2、安装驱动,会自动禁止使用默认显卡驱动。特殊情况如需手动禁用,可使用如下操作:

echo “blacklist nouveau” >>/usr/lib/modprobe.d/dist-blacklist.conf

echo “options nouveau modeset=0” >>/usr/lib/modprobe.d/dist-blacklist.conf

mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak

dracut /boot/initramfs-$(uname -r).img $(uname -r)

reboot

lsmod|grep nouveau (为空则不加载默认显卡驱动)

3、./cuda_10.1.168_418.67_linux.run (安装时除了最后一项外,其他均需选择)

4、安装完成就表示驱动已安装完毕,可以执行nvidia-smi命令查看

5、驱动安装完毕后,建议采用CUDA自带的测试工具来测试,如果测试结果显示PASS,表示CUDA安装成功。

yum install gcc-c++

yum install cpp

cd /root/NVIDIA_CUDA-10.1_Samples/1_Utilities/bandwidthTest/

make

./bandwidthTest

Part 02

DOCKER-CE安装:

1、如果安装docker,需先卸载,再安装docker-ce

yum remove docker docker-common docker selinux docker-engine

2、配置docker-ce repo源:

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

3、列出可以安装的版本:

yum list docker-ce --showduplicates | sort -r

4、默认安装即可,当前为19.03版本:

yum install docker-ce (默认安装的是Docker version 19.03.13, build 4484c46d9d)

5、启动服务及开机自启配置:

systemctl start docker

systemctl enable docker

6、从镜像商店搜索一个带有GPU驱动的镜像:

docker search nvidia (镜像商店可以搜索带nvidia驱动的镜像,用第一个即可)

7、修改配置文件:

cat >> /etc/docker/daemon.json <<EOF

{

"runtimes": {

"nvidia": {

"path": "/usr/bin/nvidia-container-runtime",

"runtimeArgs": []

}

}

}

EOF

Part 03

nividia-docker 安装

1、配置nvidia-docker相关源:

curl -s -L https://nvidia.github.io/nvidia-docker/centos7/x86_64/nvidia-docker.repo | sudo tee /etc/yum.repos.d/nvidia-docker.repo

2、搜索nvidia-docker包的版本:

yum search --showduplicates nvidia-docker

3、安装nvidia-docker:

yum install nvidia-docker-1.0.1-1.x86_64

4、启动服务,和配置开机自启动:

systemctl start nvidia-docker;

systemctl enable nvidia-docker;

systemctl status nvidia-docker

(需确保nvidia-docker状态一直正常运行,否则无正常使用)

5、检查相关依赖软件包是否已安装,如果缺失,可执行以下命令安装:

yum install libnvidia-container1

yum install nvidia-container-toolkit

yum install libnvidia-container-tools

6、重启一下docker服务:

systemctl restart docker

完成测试

nvidia-docker run --rm --gpus all nvidia/cuda:10.1

-base nvidia-smi (如下图所示,即为安装成功。此处必须加gpus all参数 如此才可调用GPU)

使用备注(躺坑日记)

a、如果需要向容器里传文件,参考一下方式传CUDA软件进容器,前面是本地文件,后面是容器id以及内部目录位置。反过来就是从容器里传文件出来。

docker cp /root/cuda_10.1.168_418.67_linux.run ffb6138f3299:/mnt/1.run

b、排除容器问题,一次性清理所有容器,则使用如下命令:

docker rm -f $(docker ps -aq)

c、重装驱动步骤:

yum remove nvidia-container-runtime

yum remove nvidia-container-toolkit

yum remove libnvidia-container-tools

yum remove nvidia-docker

./cuda_10.1.168_418.67_linux.run

yum install nvidia-docker-1.0.1-1.x86_64

systemctl start nvidia-docker; systemctl enable nvidia-docker; systemctl status nvidia-docker

yum install libnvidia-container1

yum install nvidia-container-toolkit

yum install libnvidia-container-tools

nvidia-docker run --rm --gpus all nvidia/cuda:10.1-base nvidia-smi 再跑就可以了

d、进入容器内部,执行操作使用如下命令:

docker exec -it nvidia/cuda:10.1-base /bin/bash

e、nvidia-docker 服务异常systemctl status nvidia-docker,报错error cuda all cuda-capable device are busy

此时问题为,平台CPU模式没有改成直通,修改后需要重启虚拟机才能生效。通过lscpu,查看并确认虚拟机CPU必须为物理CPU型号,而非QEMU型号CPU。

f、nvidia-docker 服务异常systemctl status nvidia-docker, 服务启动后自己停止,原因可能是GPU驱动没有装好。一定要经过CUDA自带脚本测试,测试通过才能认为显卡状态可用。

2、nvidia-docker run时报错:如果显示 no options [gpus] , --gpu all ,这个参数无效,报错原因是docker版本过低,建议使用19.03。低版本如17.03的docker-ce ,因为调用 GPU参数不同,所以可能被识别无效。

3、报错提示为缺少nvidia-container-runtime-hook,如下图,需要执行安装:yum install libnvidia-container1; yum install nvidia-container-toolkit-1.3.0-2.x86_64; yum install libnvidia-container-tools-1.3.0-1.x86_64

结语
历经一天时间,完成了ubuntu下和centos下的docker+ GPU +nvidia-docker的实践安装使用,中间简单的安装了一个Rancher PaaS平台,进行容器管理。

IaaS和PaaS都有着各自鲜明的优势,很多人总有这么一个疑问:到底该选择IaaS的资源隔离,来更好的管控硬件、迎合未来的混合云市场?还是选择PaaS,让应用更轻便、以释放人力到自己的核心业务上呢?最佳答案是:为何不全都要呢。ZStack IaaS结合PaaS实现IT改造,增加对IT的每一个细节掌控,共同撑起云计算的未来。

ZStack的愿景就是:“让每一家企业都拥有自己的云。”

docker用gpu的参数_ZStack实践汇 | ZStack+Docker支撑GPU业务实践相关推荐

  1. ZStack实践汇|ZStack与行云管家对接实践

    一.ZStack与行云管家概述 大道至简·极速部署,ZStack致力于产品化私有云和混合云. ZStack是一家坚持自主创新.专注产品化的云计算公司,以"降低企业上云门槛.让每一家企业都拥有 ...

  2. ZStack实践汇 | ZStack云平台应用堡垒机教程

    1.目的 1.1堡垒机支持统一账户管理策略,能够实现对所有远程服务器等账号进行集中管理,完成对账号整个生命周期的监控:还支持对不同用户进行不同策略的制定,细粒度的访问控制能够严防非法.越权访问事件的发 ...

  3. docker用gpu的参数_从零开始入门 K8s | GPU 管理和 Device Plugin 工作机制

    导读:2016 年,随着 AlphaGo 的走红和 TensorFlow 项目的异军突起,一场名为 AI 的技术革命迅速从学术圈蔓延到了工业界,所谓 AI 革命从此拉开了帷幕.该热潮的背后推手正是云计 ...

  4. docker容器 eureka 集成_微服务:基于 Docker 的微服务架构之分布式企业级实践参考...

    编者按:本文分享自CSDN技术博客,作者为 FlyWine,所有权归原著者.若有不妥,联系本头条号以做必要处理. 目录 Microservice 和 Docker 服务发现模式 客户端发现模式 Net ...

  5. [源码解析] NVIDIA HugeCTR,GPU版本参数服务器--- (5) 嵌入式hash表

    [源码解析] NVIDIA HugeCTR,GPU版本参数服务器- (5) 嵌入式hash表 文章目录 [源码解析] NVIDIA HugeCTR,GPU版本参数服务器--- (5) 嵌入式hash表 ...

  6. [翻译] NVIDIA HugeCTR,GPU 版本参数服务器 --(10)--- 推理架构

    [翻译] NVIDIA HugeCTR,GPU 版本参数服务器 --(10)- 推理架构 文章目录 [翻译] NVIDIA HugeCTR,GPU 版本参数服务器 --(10)--- 推理架构 0x0 ...

  7. LXD教程入门实践 配置独立ip 挂载gpu显卡驱动 制作镜像

    机器环境 以Ubuntu 16.04.6 LTS系统为例 安装lxd3.0 方式一.apt安装方式lxd sudo apt install lxd ubuntu16系统使用apt方式安装的lxd是2. ...

  8. 最佳实践系列丨Docker EE 服务发现参考架构(二)

    出品丨Docker公司(ID:docker-cn) 编译丨小东 每周一.三.五晚6点10分 与您不见不散 服务发现对服务进行注册并发布其连接信息,以使其他服务了解如何连接到服务.随着应用向微服务和面向 ...

  9. docker配置容器mysql启动参数_修改Docker容器启动配置参数

    有时候,我们创建容器时忘了添加参数 --restart=always ,当 Docker 重启时,容器未能自动启动, 现在要添加该参数怎么办呢,方法有二: 1.Docker 命令修改 docker c ...

最新文章

  1. 服务器硬盘冷迁移后网卡无法启动问题
  2. SAP EWM - 物料主数据 - EWM系统存储视图属性
  3. dows 性能监控软件 Spotlight On Windows
  4. python手机安装模块_python如何安装模块 模块安装操作教程
  5. 11g RAC环境下客户端配置TAF
  6. linux后台运行命令和杀除命令
  7. 【白皮书分享】低幼年龄段在线教育白皮书.pdf(附下载链接)
  8. java圆角矩形_[转]c# 画圆角矩形
  9. SPSS基本数据处理(一)
  10. 广告创作的灵魂---创意
  11. 十大安卓应用商店推广渠道排行榜
  12. 计算机重装系统知识,想学重装系统要怎么做?重难点知识讲解,零基础照样能够装系统!...
  13. JPress企业站主题-jpressicu使用教程
  14. Matlab/Simulink 自动代码生成 基于模型设计学习教程(1)---- 环境配置
  15. 小米手机录制数据集软件操作
  16. 比SQL还好用,又一门国产数据库语言诞生了
  17. oracle 字符集问题处理,oracle 字符集问题解决
  18. 一次Linux系统被攻击的分析过程
  19. Android ANR问题总结
  20. 辅修计算机的机械专业大二同学的跨考准备

热门文章

  1. [转]ubuntu apt错误解决办法
  2. 8日直播预告丨Oracle 19c X86下移经验分享
  3. Oracle 19c集群重装步骤详解
  4. 万字长文!分布式锁的实现全都在这里了
  5. 警示2018:那些值得在年底彻查和回顾的数据库事件
  6. 为何我中断执行的线程不起作用,Why
  7. 训练千亿参数模型的法宝,昇腾CANN异构计算架构来了~
  8. 多模态融合算法——Multimodal Compact Bilinear Pooling
  9. 90%代码如何实现自动迁移到鲲鹏平台?
  10. 【玩转Atlas200DK系列】为Atlas200DK配置wifi外挂模块