在 jenkins 中作为代理运行 gpu docker 镜像

问题描述 投票:0回答:1

我已经使用以下文档安装了 jenkins 来与 Dind 一起运行:https://www.jenkins.io/doc/book/installing/docker/在带有 GPU 的机器上

这里的两个容器都使用

--gpus all
参数运行。

我在 Jenkins 中的要求是我需要处理管道和作业中的 GPU 工作负载,因此我想尝试一个简单的示例,以便检查作为 docker 映像的代理是否可以访问 GPU。这是管道:

pipeline {
    agent none
    options {
        skipStagesAfterUnstable()
    }
    stages {
        stage('Build') {
            agent {
                docker {
                    image 'nvidia/cuda:11.6.2-base-ubuntu20.04'
                }
            }
            steps {
                sh 'nvidia-smi'
            }
        }
    }
}


当我运行此管道时,我在管道日志中收到此错误:

[Pipeline] {
[Pipeline] sh
+ nvidia-smi
/var/jenkins_home/workspace/demo-bit@tmp/durable-95bc9af6/script.sh: 1: nvidia-smi: not found

这可能是因为,我们需要为代理提供gpu参数,但是如何在管道中提供它?

docker jenkins continuous-integration jenkins-pipeline nvidia-docker
1个回答
0
投票

是的,你说得对。

如果在 docker 执行期间没有通过正确的 ARG,则无法使用 GPU,并且将找不到 nvidia-smi 命令。有几种方法可以做到这一点,下面我展示其中一种:

- app.inside("--gpus all")

完整的 Jenkinsfile 演示:

 def app

 pipeline {
      agent { label 'GPU' }
      stages {
        stage('RUN with GPU') { 
          steps { 
            script{
              app = docker.image('nvidia/cuda:11.6.2-base-ubuntu20.04')
              app.inside("--gpus all") {
                  sh "nvidia-smi"
              }
            }
          }
        }  
      }
    }

链接:

© www.soinside.com 2019 - 2024. All rights reserved.