Mesos Nvidia GPU Support 翻译

原文地址

https://github.com/apache/mesos/blob/master/docs/gpu-support.md

Mesos 在1.0.0 版本对英伟达公司的gpu进行了全面支持。

Overview

  在您了解几个关键步骤的情况下,mesos下运行gpu是非常简单直接的。其中之一是设置必要的Agent Flags,让他去列举gpu并且把它们交给mesos matser.在另一方面,我们需要设置合理的framework capabilities以便于mesos master可以把gpu当做系统资源交给framework.在两者具备的情况下,只要当容器启动,容器会像使用cpu,内存,磁盘等普通容器那样使用gpu.

  以上,mesos 将把gpu当做普通的硬件资源(cpu,磁盘,内存)使用。因此,我们可以用下面的resource offer来表示。

cpus:8; mem:1024; disk:65536; gpus:4;

  然而,gpu并不像普通的硬件设施一样可以被整个环境所选择(在gpu选择中,我们往往希望选择特定的gpu作为当前任务的处理器)。如果我们执行上面的语句,在执行任务的时候会报TASK_ERROR的错误。

  在我们写这个support的时候,英伟达gpu support 只支持在Mesos containerizer的运行(并不支持在docker containerizer)。也就是说,当mesos containerizer可以在docker containerizer本机运行的时候,之前的项限制对于大多数用户来说没有什么影响。

  我们还对英伟达在docker容器中自动挂载的特性进行了模拟。因此,您可以在docker containers中测试gpu资源或者将它们在mesos没有修改的情况下进行部署。

  在下面的章节中,我们将会对英伟达gpu相关的每一个必要的flags和framework capabilities在mesos的配置进行讲解。紧接着我们会在docker和非docker的环境下各秀一个样例。最后,我们总结了一个十分详尽的文档告诉大家如何在我们机器上安装几个必要的英伟达驱动。

 

  

Agent Flags

我们需要设置如下的isolation flags去让gpu support on an agent. 

--isolation="cgroups/devices,gpu/nvidia"

cgroups/devices 这个标志着让 agent 在task launches时候限制访问(/dev)列举下的资源。当前面的语句结合gpu/nvidia 这个flag的时候,之前cgroups/devices标志允许我们在pre-task阶段对特定的gpu进行授权和撤销。

在默认的情况下,所有在agent的gpu会当做日常资源被自动的索引并且送给Mesos master.然而,在有的时候,我们需要对这种资源做出限制(只让一部分gpu工作).在这中需求下,我们需要下面的语句去完成我们特定的要求:

--nvidia_gpu_devices="<list_of_gpu_ids>"
--resources="gpus:<num_gpus>"

在–nvidia_gpu_devices flag下,你需要用逗号(,)列举gpu,你可以用nvidia-smi 命令查看并且决定agent使用哪一些gpu.

下图我们给nvidia-smi和flag样例,这两个执行状况如下图所示。

gpu id可以是ids里面的任何一个真子集:

--nvidia_gpu_devices="0"
--nvidia_gpu_devices="0,1"
--nvidia_gpu_devices="1"

对于–resources=gpus: flag.这个gpu id必须和–nvidia_gpu_devices数量一致,如果不一致启动agent时候会报错。在此特别提醒。

Framework Capabilities

一旦在如上的flags启动agent.gpu 资源会当做传统资源被送到mesos master.然而master 只会向有gpu frameworks(GPU_RESOURCES framework capability)提供gpu计算资源。

这一个选择保证尽量避免了gpu的机器消耗非gpu的资源(这种情况在每一个计算单元都分布gpu时候是没有多少影响,但是mixed系统它会成为一个大麻烦)。

我们提供了一种设置capability的c++版本,代码如下:

FrameworkInfo framework;
framework.add_capabilities()->set_type(
      FrameworkInfo::Capability::GPU_RESOURCES);

GpuScheduler scheduler;

driver = new MesosSchedulerDriver(
    &scheduler,
    framework,
    127.0.0.1:5050);

driver->run();

Minimal GPU Capable Cluster

下面我们将介绍在gpu集群执行task的方法。第一个是没有docker环境的,第二个是有docker环境的。(环境不同,功能相同)。

注意:两个例子都在假设你已经安装英伟达gpu在mesos的所有依赖的情况下进行的。关于依赖请关注最下面external-dependencies的内容。

Minimal Setup Without Support for Docker Containers

下面的命令行展示了最基本的在含有gpu的mesos集群上(localhost)run task的情况。agent flags已经如上设置,并且在GPU_RESOURCES framework capability设置的情况下,我们接下来执行此命令使用gpu资源。

$ mesos-master       --ip=127.0.0.1       --work_dir=/var/lib/mesos

$ mesos-agent       --master=127.0.0.1:5050       --work_dir=/var/lib/mesos       --isolation="cgroups/devices,gpu/nvidia"

$ mesos-execute       --master=127.0.0.1:5050       --name=gpu-test       --command="nvidia-smi"       --framework_capabilities="GPU_RESOURCES"       --resources="gpus:1"

如果一切没有问题的话,您可以看到如下的stdout输出:

Minimal Setup With Support for Docker Containers

下面的命令行展示了最基本的在含有gpu的mesos 集群上(localhost)run task的情况。agent flags已经如上设置,并且在GPU_RESOURCES framework capability设置的情况下,另外,这里需要设置docker containers 的flag。

$ mesos-master       --ip=127.0.0.1       --work_dir=/var/lib/mesos

$ mesos-agent       --master=127.0.0.1:5050       --work_dir=/var/lib/mesos       --image_providers=docker       --executor_environment_variables="{}"       --isolation="docker/runtime,filesystem/linux,cgroups/devices,gpu/nvidia"

$ mesos-execute       --master=127.0.0.1:5050       --name=gpu-test       --docker_image=nvidia/cuda       --command="nvidia-smi"       --framework_capabilities="GPU_RESOURCES"       --resources="gpus:1"

如果一切ok,会出现下面的图片:

External Dependencies

任何运行的Mesos必须有合法的英伟达驱动程序。并且强烈建议安装对应的英伟达库(Nvidia CUDA toolkit).许多jobs依赖cuda。没有这个东西在运行job时候会出现问题或者出现很大限制。

Installing the Required Tools

英伟达的驱动可以在以下的链接下载,下载前请确定与您机器匹配的gpu,os和您准备要安装的cuda toolkits.

http://www.nvidia.com/Download/index.aspx

不过很多linux因为预先安装了Nouveau(open source video driver)会与您即将安装的英伟达驱动发生冲突,下面的链接可以帮助您卸载Nouveau。

http://www.dedoimedo.com/computers/centos-7-nvidia.html

http://www.allaboutlinux.eu/remove-nouveau-and-install-nvidia-driver-in-ubuntu-15-04/

安装好英伟达驱动之后您可以按照下面的方法安装cuda-toolkits

http://docs.nvidia.com/cuda/cuda-getting-started-guide-for-linux/

另外的,基于上面的链接,我们强烈推荐将CUDA’s lib加入ldcache以便于mesos task链接的准确性。具体操作命令如下:

sudo bash -c "cat > /etc/ld.so.conf.d/cuda-lib64.conf << EOF
/usr/local/cuda/lib64
EOF"

sudo ldconfig

特别的,如果你没有将CUDAs lib进行ldcache.你必须配置LD_LIBRARY_PATH.这个不是推荐方式,可能出现warning.

Verifying the Installation

一旦我们安装了英伟达的驱动,您可以运行nvidia-smi工具.查看gpu情况.

nvidia-smi

结果如图:

另外,您还可以根据以下的链接进一步查看安装情况(推荐使用):

http://docs.nvidia.com/cuda/cuda-getting-started-guide-for-linux/#install-samples

最后,您最好运行以下mesos在英伟达gpu下面的单元测试确保他们都能通过。

Running Mesos Unit Tests

我们现有的单元测试如下:

DockerTest.ROOT_DOCKER_NVIDIA_GPU_DeviceAllow
DockerTest.ROOT_DOCKER_NVIDIA_GPU_InspectDevices
NvidiaGpuTest.ROOT_CGROUPS_NVIDIA_GPU_VerifyDeviceAccess
NvidiaGpuTest.ROOT_INTERNET_CURL_CGROUPS_NVIDIA_GPU_NvidiaDockerImage
NvidiaGpuTest.ROOT_CGROUPS_NVIDIA_GPU_FractionalResources
NvidiaGpuTest.NVIDIA_GPU_Discovery
NvidiaGpuTest.ROOT_CGROUPS_NVIDIA_GPU_FlagValidation
NvidiaGpuTest.NVIDIA_GPU_Allocator
NvidiaGpuTest.ROOT_NVIDIA_GPU_VolumeCreation
NvidiaGpuTest.ROOT_NVIDIA_GPU_VolumeShouldInject)

大写后面的’.’的字母标志运行单元测试时候指定过滤器.在这里指定的过滤器包括ROOT, CGROUPS, NVIDIA_GPU.这标志着必须在gpu的root用户并且有CGROUPS权限下才能执行。这一些测试目的是确保英伟达gpu的存在以及可用。

如果这些都符合的话,您可以用以下命令取执行单元测试:

[mesos]$ GTEST_FILTER="" make -j check
[mesos]$ sudo bin/mesos-tests.sh --gtest_filter="*NVIDIA_GPU*"
时间: 10-26

Mesos Nvidia GPU Support 翻译的相关文章

Tensorflow Windows Build with GPU Support

Step-by-step Windows build 虽然Research一直在用Caffe,而且用的飞起,但还是很关注tensorflow社区的事情,最近发现TF有windows版本的了,就自己试了试. 步骤:https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/cmake Pre-requisites: Microsoft Windows 10 Microsoft Visual Studio Enter

Nvidia GPU 上的 CNN 计算速度变迁

笔者从 2012 年初开始接触 GPU 编程,2014 年上半年开始接触 Caffe,可以毫不谦虚地说是"一天天看着 Nvidia GPU 和 Caffe 长大的". Nvidia GPU 架构经历了 Fermi.Kepler.Maxwell.Pascal(都是著名物理学家:特斯拉.费米.开普勒.麦克斯韦.帕斯卡.还未发布的 Volta 伏打--),硬件版本号从 1.x 到现在的 6.x,CUDA Toolkit 从 3.x 到现在 8.x,cuDNN 也从 v1 升级到 v5.1.

编译GDAL支持OpenCL使用GPU加速

前言 GDAL库中提供的gdalwarp支持各种高性能的图像重采样算法,图像重采样算法广泛应用于图像校正,重投影,裁切,镶嵌等算法中,而且对于这些算法来说,计算坐标变换的运算量是相当少的,绝大部分运算量都在图像的重采样算法中,尤其是三次卷积采样以及更高级的重采样算法来说,运算量会成倍的增加,所以提升这些算法的处理效率优先是提高重采样的效率.由于GPU的多核心使得目前对于GPU的并行处理非常热,同时也能大幅度的提升处理速度.基于上述原因,GDALWARP也提供了基于OPENCL的GPU加速,之前在

Fedora 25/24/23 nVidia Drivers Install Guide

https://www.if-not-true-then-false.com/2015/fedora-nvidia-guide/ search Most Popular Featured Linux Programming Servers SQL Advertise If Not True Then False Most Popular Featured Linux Programming Servers SQL Advertise Fedora 25/24/23 nVidia Drivers

windows10+anaconda3+tensorflow(GPU)

2017.6.2安装时间 先装anaconda3或者在anaconda2下win+r cmd控制器 conda create -n Anaconda3 python=3.5 (上一步会在里面出现文件 我剪切到别的地方了) 在Anaconda2/envs中安装Anaconda 3版本的  会提示已经存在 我是删了重新在envs下直接安装Anaconda3 注意要安装3.5版本不要3.6网页下面有连接进去安装Anaconda3 4.2 然后把刚才的两个文件复制粘贴回来 然后调用的时候就 activa

win7+theano with GPU enabled

要做卷积神经网络的一些东西,所以要装theano,网上很多Theano安装教程版本较老,而各安装包更新很快,参考价值有限.走了很多弯路才装好,把这个过程记录下来,希望对大家有帮助~ ~ 我的配置:win7,32位(64和32位安装步骤没差,下安装包版本有差而已),vs2012 首先推荐一篇英文安装指南,写的十分详细,很多安装指南都是参考的这篇.不过因为这篇里存在着一些冗余成分,个人酌情参考,不过遇到难题时可以看看:http://deeplearning.net/software/theano/i

GPU 加速NLP任务(Theano+CUDA)

之前学习了CNN的相关知识,提到Yoon Kim(2014)的论文,利用CNN进行文本分类,虽然该CNN网络结构简单效果可观,但论文没有给出具体训练时间,这便值得进一步探讨. Yoon Kim代码:https://github.com/yoonkim/CNN_sentence 利用作者提供的源码进行学习,在本人机子上训练时,做一次CV的平均训练时间如下,纵坐标为min/CV(供参考): 机子配置:Intel(R) Core(TM) i3-4150 CPU @ 3.50GHz, 32G,x64 显

GPU与MIC对比

属性 NVIDIA GPU Intel MIC 单核 流处理器/CUDA core 每个核运行一个线程 X86 core 每个核上最多支持4个硬件线程 主频 接近1GHz 1.0-1.1GHz 核数 数十个到数千个 57-61 并行度 Grid.block.thread多级并行 细粒度并行(线程数>>核数) 线程之间开销为0 线程+向量化 线程数<=(核数-1)*4 向量化宽度512bit(单精度:16,双精度:8) 内存大小(GB) 最大12GB 6/8/16GB 内存带宽 288 G

看NVIDIA人工智能全局,黄仁勋评价股东孙正义

(黄仁勋在2017台北Computex上) 2017年5月,传出软银悄悄购入40亿美元的NVIDIA股票,成为了NVIDIA的第四大股东.众所周知,孙正义为了"釜底抽薪"下一代技术浪潮,已经组建了1000亿美元的科技基金,专门用于收购或购买下一代技术公司,人工智能就是这类型的关键型技术,而NVIDIA无疑正处于人工智能的风口浪尖. 在6月的台北Computex电脑展上,NVIDIA创始人.CEO黄仁勋这样评价孙正义本人,"孙正义是我所知道的唯一能准确预知每一次科技浪潮的人&q