当前位置: 首页 > news >正文

做网站普洱哪些公司可以做网站

做网站普洱,哪些公司可以做网站,福建省建设执业资格注册管理中心网站,jsp租房网站开发Nvidia GPU如何在Kubernetes 里工作 本文介绍Nvidia GPU设备如何在Kubernetes中管理调度。 整个工作流程分为以下两个方面#xff1a; 如何在容器中使用GPUKubernetes 如何调度GPU如何在容器中使用GPU 想要在容器中的应用可以操作GPU#xff0c; 需要实两个目标 容器中可…Nvidia GPU如何在Kubernetes 里工作 本文介绍Nvidia GPU设备如何在Kubernetes中管理调度。 整个工作流程分为以下两个方面 如何在容器中使用GPUKubernetes 如何调度GPU如何在容器中使用GPU 想要在容器中的应用可以操作GPU 需要实两个目标 容器中可以查看GPU设备容器中运行的应用可以通过Nvidia驱动操作GPU显卡 详细介绍可见 https://devblogs.nvidia.com/gpu-containers-runtime/ Nvidia-docker GitHub: https://github.com/NVIDIA/nvidia-docker Nvidia提供Nvidia-docker项目它是通过修改Docker的Runtime为nvidia runtime工作当我们执行 nvidia-docker create 或者 nvidia-docker run    时它会默认加上 --runtimenvidia 参数。将runtime指定为nvidia。 当然为了方便使用可以直接修改Docker daemon 的启动参数修改默认的 Runtime为 nvidia-container-runtime  cat /etc/docker/daemon.json {default-runtime: nvidia,runtimes: {nvidia: {path: /usr/bin/nvidia-container-runtime,runtimeArgs: []}} } gpu-containers-runtime GitHub:  https://github.com/NVIDIA/nvidia-container-runtimegpu-containers-runtime  是一个NVIDIA维护的容器 Runtime它在runc的基础上维护了一份 Patch 我们可以看到这个patch的内容非常简单 唯一做的一件事情就是在容器启动前注入一个 prestart  的hook 到容器的Spec中hook的定义可以查看 OCI规范 。这个hook 的执行时机是在容器启动后Namespace已创建完成容器自定义命令(Entrypoint)启动前。nvidia-containers-runtime 定义的 prestart 的命令很简单只有一句  nvidia-container-runtime-hook prestart   gpu-containers-runtime-hook GitHub: https://github.com/NVIDIA/nvidia-container-runtime/tree/master/hook/nvidia-container-runtime-hook gpu-containers-runtime-hook  是一个简单的二进制包定义在Nvidia container runtime的hook中执行。 目的是将当前容器中的信息收集并处理转换为参数调用 nvidia-container-cli  。 主要处理以下参数 根据环境变量 NVIDIA_VISIBLE_DEVICES 判断是否会分配GPU设备以及挂载的设备ID。如果是未指定或者是 void 则认为是非GPU容器不做任何处理。   否则调用 nvidia-container-cli  GPU设备作为 --devices  参数传入 环境环境变量 NVIDIA_DRIVER_CAPABILITIES 判断容器需要被映射的 Nvidia 驱动库。环境变量 NVIDIA_REQUIRE_*  判断GPU的约束条件。 例如 cuda9.0 等。 作为 --require 参数传入传入容器进程的Pid gpu-containers-runtime-hook  做的事情就是将必要的信息整理为参数传给 nvidia-container-cli configure 并执行。 nvidia-container-cli nvidia-container-cli 是一个命令行工具用于配置Linux容器对GPU 硬件的使用。支持 list:  打印 nvidia 驱动库及路径info:  打印所有Nvidia GPU设备configure 进入给定进程的命名空间执行必要操作保证容器内可以使用被指定的GPU以及对应能力指定 Nvidia 驱动库。 configure是我们使用到的主要命令它将Nvidia 驱动库的so文件 和 GPU设备信息 通过文件挂载的方式映射到容器中。 代码如下 https://github.com/NVIDIA/libnvidia-container/blob/master/src/cli/configure.c#L272 /* Mount the driver and visible devices. */if (perm_set_capabilities(err, CAP_EFFECTIVE, ecaps[NVC_MOUNT], ecaps_size(NVC_MOUNT)) 0) {warnx(permission error: %s, err.msg);goto fail;}if (nvc_driver_mount(nvc, cnt, drv) 0) {warnx(mount error: %s, nvc_error(nvc));goto fail;}for (size_t i 0; i dev-ngpus; i) {if (gpus[i] ! NULL nvc_device_mount(nvc, cnt, gpus[i]) 0) {warnx(mount error: %s, nvc_error(nvc));goto fail;}}如果对其他模块感兴趣可以在 https://github.com/NVIDIA/libnvidia-container  阅读代码。 以上就是一个nvidia-docker的容器启动的所有步骤。 当我们安装了nvidia-docker 我们可以通过以下方式启动容器 docker run --rm -it -e NVIDIA_VISIBLE_DEVICESall ubuntu:18.04 在容器中执行 mount  命令可以看到名为 libnvidia-xxx.so 和 /proc/driver/nvidia/gpus/xxx  映射到容器中。 以及 nvidia-smi 和 nvidia-debugdump 等nvidia工具。 # mount ## .... /dev/vda1 on /usr/bin/nvidia-smi type ext4 (ro,nosuid,nodev,relatime,dataordered) /dev/vda1 on /usr/bin/nvidia-debugdump type ext4 (ro,nosuid,nodev,relatime,dataordered) /dev/vda1 on /usr/bin/nvidia-persistenced type ext4 (ro,nosuid,nodev,relatime,dataordered) /dev/vda1 on /usr/bin/nvidia-cuda-mps-control type ext4 (ro,nosuid,nodev,relatime,dataordered) /dev/vda1 on /usr/bin/nvidia-cuda-mps-server type ext4 (ro,nosuid,nodev,relatime,dataordered) /dev/vda1 on /usr/lib/x86_64-linux-gnu/libnvidia-ml.so.396.37 type ext4 (ro,nosuid,nodev,relatime,dataordered) /dev/vda1 on /usr/lib/x86_64-linux-gnu/libnvidia-cfg.so.396.37 type ext4 (ro,nosuid,nodev,relatime,dataordered) /dev/vda1 on /usr/lib/x86_64-linux-gnu/libcuda.so.396.37 type ext4 (ro,nosuid,nodev,relatime,dataordered) /dev/vda1 on /usr/lib/x86_64-linux-gnu/libnvidia-opencl.so.396.37 type ext4 (ro,nosuid,nodev,relatime,dataordered) /dev/vda1 on /usr/lib/x86_64-linux-gnu/libnvidia-ptxjitcompiler.so.396.37 type ext4 (ro,nosuid,nodev,relatime,dataordered) /dev/vda1 on /usr/lib/x86_64-linux-gnu/libnvidia-fatbinaryloader.so.396.37 type ext4 (ro,nosuid,nodev,relatime,dataordered) /dev/vda1 on /usr/lib/x86_64-linux-gnu/libnvidia-compiler.so.396.37 type ext4 (ro,nosuid,nodev,relatime,dataordered) devtmpfs on /dev/nvidiactl type devtmpfs (ro,nosuid,noexec,relatime,size247574324k,nr_inodes61893581,mode755) devtmpfs on /dev/nvidia-uvm type devtmpfs (ro,nosuid,noexec,relatime,size247574324k,nr_inodes61893581,mode755) devtmpfs on /dev/nvidia-uvm-tools type devtmpfs (ro,nosuid,noexec,relatime,size247574324k,nr_inodes61893581,mode755) devtmpfs on /dev/nvidia4 type devtmpfs (ro,nosuid,noexec,relatime,size247574324k,nr_inodes61893581,mode755) proc on /proc/driver/nvidia/gpus/0000:00:0e.0 type proc (ro,nosuid,nodev,noexec,relatime) 我们可以执行nvidia-smi查看容器中被映射的GPU卡 Kubernetes 如何调度GPU 之前我们介绍了如何在容器中使用Nvidia GPU卡。 那么当一个集群中有成百上千个节点以及GPU卡我们的问题变成了如何管理和调度这些GPU。 Device plugin Kubernetes 提供了Device Plugin 的机制用于异构设备的管理场景。原理是会为每个特殊节点上启动一个针对某个设备的DevicePlugin pod 这个pod需要启动grpc服务 给kubelet提供一系列接口。 type DevicePluginClient interface {// GetDevicePluginOptions returns options to be communicated with Device// ManagerGetDevicePluginOptions(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*DevicePluginOptions, error)// ListAndWatch returns a stream of List of Devices// Whenever a Device state change or a Device disapears, ListAndWatch// returns the new listListAndWatch(ctx context.Context, in *Empty, opts ...grpc.CallOption) (DevicePlugin_ListAndWatchClient, error)// Allocate is called during container creation so that the Device// Plugin can run device specific operations and instruct Kubelet// of the steps to make the Device available in the containerAllocate(ctx context.Context, in *AllocateRequest, opts ...grpc.CallOption) (*AllocateResponse, error)// PreStartContainer is called, if indicated by Device Plugin during registeration phase,// before each container start. Device plugin can run device specific operations// such as reseting the device before making devices available to the containerPreStartContainer(ctx context.Context, in *PreStartContainerRequest, opts ...grpc.CallOption) (*PreStartContainerResponse, error) } DevicePlugin 注册一个 socket 文件到 /var/lib/kubelet/device-plugins/ 目录下kubelet 通过这个目录下的socket文件向对应的 Device plugin 发送grpc请求。 本文不过多介绍Device Plugin 的设计 感兴趣可以阅读这篇文章 https://yq.aliyun.com/articles/498185 Nvidia plugin Github https://github.com/NVIDIA/k8s-device-plugin 为了能够在Kubernetes中管理和调度GPU Nvidia提供了Nvidia GPU的Device Plugin。 主要功能如下 支持ListAndWatch 接口上报节点上的GPU数量支持Allocate接口 支持分配GPU的行为。  Allocate 接口只做了一件事情就是给容器加上 NVIDIA_VISIBLE_DEVICES  环境变量。 https://github.com/NVIDIA/k8s-device-plugin/blob/v1.11/server.go#L153 // Allocate which return list of devices. func (m *NvidiaDevicePlugin) Allocate(ctx context.Context, reqs *pluginapi.AllocateRequest) (*pluginapi.AllocateResponse, error) {devs : m.devsresponses : pluginapi.AllocateResponse{}for _, req : range reqs.ContainerRequests {response : pluginapi.ContainerAllocateResponse{Envs: map[string]string{NVIDIA_VISIBLE_DEVICES: strings.Join(req.DevicesIDs, ,),},}for _, id : range req.DevicesIDs {if !deviceExists(devs, id) {return nil, fmt.Errorf(invalid allocation request: unknown device: %s, id)}}responses.ContainerResponses append(responses.ContainerResponses, response)}return responses, nil } 前面我们提到 Nvidia的 gpu-container-runtime  根据容器的 NVIDIA_VISIBLE_DEVICES 环境变量会决定这个容器是否为GPU容器并且可以使用哪些GPU设备。 而Nvidia GPU device plugin做的事情就是根据kubelet 请求中的GPU DeviceId 转换为 NVIDIA_VISIBLE_DEVICES 环境变量返回给kubelet kubelet收到返回内容后会自动将返回的环境变量注入到容器中。当容器中包含环境变量启动时 gpu-container-runtime  会根据 NVIDIA_VISIBLE_DEVICES 里声明的设备信息将设备映射到容器中并将对应的Nvidia Driver Lib 也映射到容器中。 总体流程 整个Kubernetes调度GPU的过程如下 GPU Device plugin 部署到GPU节点上通过 ListAndWatch  接口上报注册节点的GPU信息和对应的DeviceID。 当有声明 nvidia.com/gpu  的GPU Pod创建出现调度器会综合考虑GPU设备的空闲情况将Pod调度到有充足GPU设备的节点上。节点上的kubelet 启动Pod时根据request中的声明调用各个Device plugin 的 allocate接口 由于容器声明了GPU。 kubelet 根据之前 ListAndWatch 接口收到的Device信息选取合适的设备DeviceID 作为参数调用GPU DevicePlugin的 Allocate 接口GPU DevicePlugin 接收到调用将DeviceID 转换为 NVIDIA_VISIBLE_DEVICES 环境变量返回kubeletkubelet将环境变量注入到Pod 启动容器容器启动时 gpu-container-runtime 调用 gpu-containers-runtime-hook gpu-containers-runtime-hook  根据容器的 NVIDIA_VISIBLE_DEVICES 环境变量转换为 --devices 参数调用 nvidia-container-cli prestart  nvidia-container-cli 根据 --devices 将GPU设备映射到容器中。 并且将宿主机的Nvidia Driver Lib 的so文件也映射到容器中。 此时容器可以通过这些so文件调用宿主机的Nvidia Driver。 原文链接 本文为云栖社区原创内容未经允许不得转载。
http://www.pierceye.com/news/178442/

相关文章:

  • 多语言网站建设方案新建网站的价格
  • 企业网站服务器的选择企业网站建设市场分析
  • 阜阳做网站的公司网页制作自学教程
  • 阿里巴巴吧网站怎么做网页设计师属于什么部门
  • 望京网站建设公司红酒专业网站建设
  • 兰州市城市建设设计院网站游戏网站搭建需要多少钱
  • 网站建设易客vi设计公司 深圳
  • 白银网站运行网站建设客户去哪里找
  • 建湖网站设计云浮网站设计
  • 招聘网站的简历可以做几份vue可以做pc网站吗
  • 高端个性化网站建设版面设计经历了哪几个阶段
  • wordpress本地图片一个网站完整详细的seo优化方案
  • 试玩网站怎么做5g影视
  • 宝宝投票网站怎么做网站首页添加代码
  • 网站开发分类网站建设的目标
  • 做旅游的网站有哪些专业做鞋子的网站
  • 深圳旅游网站开发新余网络推广
  • 平台网站建设ppt雪梨直播
  • 建设外贸类网站互联网下的网络营销
  • 网站开发需要的知识WordPress要什么环境
  • wordpress 多站点设置欧洲c2c平台
  • 赤峰网站开发公司做网站的公司怎么推销
  • 深圳福田区区住房和建设局网站wordpress 小程序开发
  • 网站建设与推cctv-10手机网站模板用什么做
  • 网站的建站方案网络科技有限公司
  • ps做图游戏下载网站有哪些内容广州网站(建设信科网络)
  • 专做皮鞋销售网站seo网站优化方案
  • 街区网站建设的意义做外贸网站 怎么收钱
  • 北京网站制作公司兴田德润可信赖给钱做h事都行的网站名
  • 合肥珍岛公司做网站推广怎么样如何查询网站备案进度