我已经使用以下文档安装了 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 执行期间没有通过正确的 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"
}
}
}
}
}
}
链接: