基于 gitlab-runner 实现调度GPU的资源

本篇目录

    • 1. 客户需求
    • 2. 需求调研
    • 3. 实践
      • 3.1 方案一:环境变量的方式
      • 3.2 方案二:k8s 自身的spec注入机制
    • 4. 效果

该实践来自于客户的一个真实需求

1. 客户需求

客户的某些流水线需要使用GPU资源,但是对于GPU服务器而言,会有多张GPU显卡,而客户只需要将runner的资源调度在其中的一张或者多张显卡,而不是占用整个GPU服务器的显卡资源。

2. 需求调研

  • 通过查看runner的相关文档,对于runner使用GPU资源而言,本身runner是不需要做任何配置的,详见说明 [GPU]
    (https://docs.gitlab.com/runner/configuration/gpus.html)。
  • 关于GPU(主要针对的英伟达),可以通过 NVIDIA_VISIBLE_DEVICES 环境变量来控制,进行制定数量GPU显卡资源的调度。
  • 针对runner的执行器为 kubernetes 类型而言,可以通过spec的配置注入机制来实现将部分配置聚合在runner 拉起的pod中,从而实现资源的控制,该技术本身是基于k8s的原理来实现的。

3. 实践

3.1 方案一:环境变量的方式

gitlab runner的配置文件调整如下:

  config: |[[runners]]environment = ["FF_USE_ADVANCED_POD_SPEC_CONFIGURATION=true","NVIDIA_VISIBLE_DEVICES=0"]

说明:

  • 对于多张显卡而言,总是从0..n,因此这里的 0 指的是第一张显卡,也就是说runner的作业拉起pod后,会占用第一张显卡。
  • 如果要使用多张显卡,可以参考NVIDIA_VISIBLE_DEVICES 的详细配置。

3.2 方案二:k8s 自身的spec注入机制

相比于方案一,方案二要更灵活一下,但是需要开启 FF_USE_ADVANCED_POD_SPEC_CONFIGURATION flag。具体的配置调整如下:

config: |[[runners]]environment = ["FF_USE_ADVANCED_POD_SPEC_CONFIGURATION=true"][runners.kubernetes]namespace = "{{.Release.Namespace}}"image = "alpine"pull_policy = ["if-not-present"][runners.kubernetes.node_selector]"nvidia.com/gpu.present" = "true"[[runners.kubernetes.pod_spec]]name = "cpu limit"patch = '''containers:- name: buildresources:limits:nvidia.com/gpu: 1'''patch_type = "strategic"

patch_type说明:

  • strategic:Kubernetes 的 战略合并 Patch,可以在不破坏原始 YAML 结构的前提下进行合并和修改(推荐)。
  • json:使用 JSON Patch 格式来修改资源。
  • merge:简单的合并 Patch。

4. 效果

调整前
在这里插入图片描述

调整后
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/891901.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人脑神经元的连接方式与视觉提取功能对深度学习的启发

1. 引言 人脑神经网络复杂的连接方式和高效的信息处理能力,为人工智能算法的设计提供了重要灵感。研究人脑神经元的连接特点,尤其是其反馈与递归结构,不仅能帮助理解大脑如何感知与认知,还能揭示深度学习模型(如ResNe…

计算机网络 —— 网络编程(TCP)

计算机网络 —— 网络编程(TCP) TCP和UDP的区别TCP (Transmission Control Protocol)UDP (User Datagram Protocol) 前期准备listen (服务端)函数原型返回值使用示例注意事项 accpect (服务端)函数原型返回…

模型 九屏幕分析法

系列文章 分享 模型,了解更多👉 模型_思维模型目录。九屏幕法:全方位分析问题的系统工具。 1 九屏幕分析法的应用 1.1 新产品研发的市场分析 一家科技公司计划开发一款新型智能手机,为了全面评估市场潜力和风险,他们…

Unity2D初级背包设计中篇 MVC分层撰写(万字详解)

本人能力有限,如有不足还请斧正,理论分析链接如下: Unity2D初级背包设计前篇 理论分析-CSDN博客 目录 1.M层:数据存储 物品 仓库容器 加载方式 2.M层:逻辑撰写 InventoryManager 仓库的管理 SlotData 物品的增…

深入理解 Linux 管道:创建与应用详解(匿名管道进程池)

在现代操作系统中,进程间通信(IPC)是实现多任务、多进程协作的关键技术之一。Linux 提供了多种 IPC 机制,本博客将帮助您详细的理解进程间通信的原理 首先,在学习管道之前,我们先理解一下管道的存在是为了什…

SWM221系列芯片之电机应用及控制

经过对SWM221系列的强大性能及外设资源,TFTLCD彩屏显示及控制进行了整体介绍后,新迎来我们的电控篇---SWM221系列芯片之电机应用及控制。在微控制器市场面临性能、集成度与成本挑战的当下,SWM221系列芯片以其卓越性能与创新设计,受…

qt qss文件的使用

qt样式的修改方式 一 通过ui界面的改变样式表来直接修改显示效果。 不推荐,其他人不好修改,不够直观,不易维护。 二 通过setStyleSheet接口修改。 一般,界面很少的时候可以使用。一旦界面多起来,代码部分就显得杂乱…

Centos文件已删除空间未释放

原创作者:运维工程师 谢晋 Centos文件已删除空间未释放 释放已删除空间 释放已删除空间 很多时候,你会发现,明明已经删除了文件或日志,但是系统空间就是未缩减,很明显,有空间被已删除文件占用&#xff…

reactor中的并发

1. reactor中的并发有两种方式 1.1 flatmap,底层是多线程并发处理。在reactor的演讲中,flatmap对于io类型的并发效果较好. flamap有两个参数: int concurrency, int prefetch。分别代表并发的线程数和缓存大小 注意凡是参数中有prefetch的,都…

深入 Redis:高级特性与最佳实践

引言 在分布式系统和高并发环境中,Redis 已经成为了一个不可或缺的工具。作为一个内存数据结构存储系统,Redis 不仅支持丰富的数据类型,还提供了高效的操作和极低的延迟,这使得它广泛应用于缓存、消息队列、计数器、排行榜等场景…

如何在 JavaScript 中实现日期格式化?

在 JavaScript 中,日期格式化的常见方法是通过使用内置的 Date 对象来进行处理。JavaScript 本身并没有直接提供一个强大的日期格式化函数,因此通常会使用一些流行的第三方库,比如 date-fns 或 moment.js,但如果我们不依赖外部库&…

Trimble天宝X9三维扫描仪为建筑外墙检测提供了全新的解决方案【沪敖3D】

随着城市化进程的快速推进,城市高层建筑不断增多,对建筑质量的要求也在不断提高。建筑外墙检测,如平整度和垂直度检测,是衡量建筑质量的重要指标之一。传统人工检测方法不仅操作繁琐、效率低下,还难以全面反映墙体的真…

浅谈棋牌游戏开发流程二:后端技术选型与基础环境搭建

一、前言:客户端只是台前,后端才是幕后“指挥中心” 在上一篇“客户端技术”中,我们聊到玩家看到的一切动作、动画、界面逻辑,都靠客户端去渲染和交互。但若没有后端的支撑,玩家点了“出牌”可能就像一拳打在空气里—…

机器人手眼标定

机器人手眼标定 一、机器人手眼标定1. 眼在手上标定基本原理2. 眼在手外标定基本原理 二、眼在手外标定实验三、标定精度分析 一、机器人手眼标定 要实现由图像目标点到实际物体上抓取点之间的坐标转换,就必须拥有准确的相机内外参信息。其中内参是相机内部的基本参…

unity中的UI系统---GUI

一、工作原理和主要作用 1.GUI是什么? 即即时模式游戏用户交互界面(IMGUI),在unity中一般简称为GUI,它是一个代码驱动的UI系统。 2.GUI的主要作用 2.1作为程序员的调试工具,创建游戏内调测试工具 2.2为…

【Golang 面试题】每日 3 题(二十)

✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/UWz06 📚专栏简介:在这个专栏中,我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏…

【JS】Promise的执行顺序

概述 理解 Promise 的执行顺序时,需要牢记以下两点: 微任务与宏任务的优先级: 微任务:Promise.then()、catch、finally 是微任务。宏任务:setTimeout、setInterval 是宏任务。微任务的优先级高于宏任务:在…

Java开发 PDF文件生成方案

业务需求背景 业务端需要能够将考试答卷内容按指定格式呈现并导出为pdf格式进行存档,作为紧急需求插入。导出内容存在样式复杂性,包括特定的字体(中文)、字号、颜色,页面得有页眉、页码,数据需要进行表格聚…

SpringCloud微服务架构

文章目录 认识微服务:SpringCloud 服务拆分及远程调用实现夸远程服务调用使用RestTemplateEureka注册中心 搭建EruekaServer注册服务服务发现 Ribbon负载均衡 修改负载均衡规则解饿加载 Nacos注册中心(nacos一部分功能) 服务注册到nacosnacos…

【设计模式-02】23 种设计模式的分类和功能

在软件工程领域,设计模式是解决常见设计问题的经典方案。1994 年,Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides(四人帮,GoF)在《设计模式:可复用面向对象软件的基础》一书中系统性地总结了…