手把手教你为Slurm集群添加GTX 1080Ti GPU节点(附TensorFlow 1.14测试脚本)

📅 2026/7/12 7:51:24 👁️ 阅读次数 📝 编程学习
手把手教你为Slurm集群添加GTX 1080Ti GPU节点(附TensorFlow 1.14测试脚本)

从零构建Slurm GPU集群:GTX 1080Ti节点实战指南

在高校实验室和中小型企业的计算场景中,GTX 1080Ti凭借其出色的性价比,依然是深度学习入门和轻量级科研计算的理想选择。本文将带您完成从硬件验收到Slurm资源调度的全流程实战,特别针对初次接触HPC集群管理的开发者,解决"配置成功但任务无法运行"的典型问题。

1. 硬件环境深度验证

GTX 1080Ti的驱动兼容性需要特别注意。虽然官方文档声明支持CUDA 10.0,但实际测试显示:

# 验证驱动版本(需≥440.100) nvidia-smi --query-gpu=driver_version --format=csv # 验证CUDA工具包 nvcc --version | grep "release 10"

常见版本冲突表现为:

  • CUDA 10.0要求驱动版本≥410.48
  • cuDNN 7.6需与CUDA 10.0严格匹配

推荐环境矩阵:

组件最低版本推荐版本验证命令
NVIDIA驱动410.48440.100nvidia-smi
CUDA工具包10.010.0.130nvcc --version
cuDNN7.6.57.6.5.32`cat /usr/local/cuda/include/cudnn.h

注意:若已安装其他CUDA版本,可通过update-alternatives配置多版本切换,避免环境污染。

2. 系统级配置优化

2.1 安全策略调整实践

临时禁用防火墙(重启后恢复):

sudo systemctl stop firewalld sudo iptables -F

永久关闭SELinux需修改配置文件:

sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

验证生效状态:

getenforce # 应返回Disabled

2.2 硬件设备权限配置

创建nvidia设备访问规则:

cat << EOF | sudo tee /etc/udev/rules.d/70-nvidia.rules KERNEL=="nvidia*", MODE="0666", GROUP="slurm" EOF sudo udevadm control --reload-rules

关键检查点:

  • /dev/nvidia*设备是否存在
  • slurm用户是否有读写权限
  • 设备主次编号是否正常

3. Slurm配置精要

3.1 管理节点配置

slurm.conf关键参数解析:

GresTypes=gpu NodeName=gpu01 Gres=gpu:1 CPUs=56 RealMemory=256000 Sockets=2 ThreadsPerCore=2

参数对照表:

参数示例值作用说明常见错误
GresTypesgpu声明资源类型拼写错误
Gresgpu:1每节点GPU数量冒号使用中文符号
CPUs56逻辑CPU总数忽略超线程
RealMemory256000内存(MB)单位错误

3.2 计算节点配置

gres.conf典型配置:

NodeName=gpu01 Name=gpu Type=gtx1080ti File=/dev/nvidia0

多GPU配置示例:

NodeName=gpu02 Name=gpu Type=gtx1080ti File=/dev/nvidia[0-3]

验证配置有效性:

sudo slurmd -C | grep Gres # 应显示已识别的GPU资源

4. 全链路测试方案

4.1 基础功能验证

测试脚本tf_test.py增强版:

import tensorflow as tf import os def verify_gpu(): print(f"Visible devices: {os.environ.get('CUDA_VISIBLE_DEVICES', 'UNSET')}") with tf.device('/gpu:0'): matrix1 = tf.constant([[3., 3.]]) matrix2 = tf.constant([[2.],[2.]]) product = tf.matmul(matrix1, matrix2) with tf.Session() as sess: result = sess.run(product) print(f"GPU计算结果: {result}") assert result == [[12.]], "计算结果验证失败" if __name__ == "__main__": verify_gpu()

4.2 Slurm任务提交

单GPU测试命令:

srun --gres=gpu:1 --nodes=1 --ntasks-per-node=1 python tf_test.py

多GPU压力测试:

sbatch << EOF #!/bin/bash #SBATCH --job-name=multi_gpu_test #SBATCH --gres=gpu:2 #SBATCH --nodes=1 #SBATCH --ntasks-per-node=2 python tf_test.py EOF

4.3 排错指南

常见故障现象及解决方案:

  1. GPU未识别

    • 检查/dev/nvidia*设备存在性
    • 验证nvidia-smi可正常输出
    • 确认Slurm服务已重启
  2. 权限拒绝

    • 检查/dev/nvidia*的权限模式
    • 验证slurm用户组配置
    • 确认SELinux彻底关闭
  3. CUDA初始化失败

    • 检查环境变量LD_LIBRARY_PATH
    • 验证CUDA与驱动版本匹配
    • 测试非Slurm环境下的CUDA程序

在笔者的实施经验中,约70%的配置问题源于驱动版本不匹配或权限设置不当。建议先通过本地用户运行测试程序,再逐步过渡到Slurm环境验证。