多人共用GPU服务器LXD安装

2022/10/22 posts

# 宿主机

# 系统

建议安装server版,通过ssh远程使用

# 环境

安装NVIDIA显卡驱动、CUDA、cudnn 参考:ubuntu安装cuda及cudnn

# LXD的安装与初始化

# 安装LXD

sudo apt-get install lxd zfsutils-linux bridge-utils
  • LXD 实现虚拟容器
  • ZFS 用于管理物理磁盘,支持LXD高级功能
  • bridge-utils 用于搭建网桥

# 配置ZFS

  • 查看可用磁盘和分区

    sudo fdisk -l
    

    image-20221021190819273

    可以看到这块磁盘一共3.65T,只使用了500G,剩余的空间专门留出来用于LXD容器的。

  • 查看分区

    sudo fdisk /dev/sda
    

    image-20221021191022810

    按下图操作,将磁盘所剩空间全部作为容器的存储空间。分区为 /dev/sda2

    image-20221021191239361

# LXD初始化

lxd init

image-20221021202624683

这里面的配置错了也没关系,还可以使用 sudo lxc profile edit default 再次修改配置

image-20221021202820284

# 容器的创建与连接

# 创建容器

sudo lxc launch ubuntu:20.04 lgh

# 进入容器

sudo lxc exec lgh bash

image-20221021203819062

这里进入的是root用户,实际上容器里面还有一个用户名为 ubuntu 的默认用户

# 修改密码

passwd root
passwd ubuntu

网上说默认密码和用户名相同,我输入一直双周,因此直接重置了密码

# 设置SSH

编辑 /etc/ssh/sshd_config 文件,将 PasswordAuthentication 改为yes

sudo nano /etc/ssh/sshd_config
# 重启ssh服务
sudo /etc/init.d/ssh restart

image-20221021204312827

# 退出容器

exit

# 查看容器IP

sudo lxc list

image-20221021204509747

# 端口转发

sudo lxc config device add lgh proxy0 proxy listen=tcp:{宿主机IP}:6002 connect=tcp:10.228.141.116:22 bind=host

这里将宿主机的6002端口映射到了容器的22端口,ssh连接宿主机的6002端口即可进入容器

# 初始容器的配置

# 连接容器

ssh ubuntu@{宿主机IP} -p 6002

# 添加显卡

# 添加所有显卡

lxc config device add {容器名} gpu gpu

# 添加指定显卡

lxc config device add {容器名} gpu0 gpu id=0

# 安装显卡驱动

与宿主机的显卡版本必须一致,需要注意的是容器里面安装显卡驱动时需要加上后面的参数,安装时不需要安装到内核

sudo sh ./NVIDIA-Linux-X86_64-[YOURVERSION].run --no-kernel-module

# 容器模板

可以将配置好的容器打包成镜像模板,方便后续的容器创建

  • 停止容器

    lxc stop {容器名}
    
  • 打包

    sudo lxc publish {容器名} --alias {镜像名} --public
    

# 共享目录

lxc profile device add default data disk source=/data/lxd-data path=/opt/data

# 遇到的问题

  • 宿主机的英伟达驱动重启了后宿主机不使用,容器内是不能用的,解决方法如下

    sudo -S /sbin/modprobe nvidia-uvm
    D=`grep nvidia-uvm /proc/devices | awk '{print $1}'`
    sudo -S mknod -m 666 /dev/nvidia-uvm c $D 0
    

# 参考文章

shenuiuin/LXD_GPU_SERVER: 实验室GPU服务器的LXD虚拟化 (github.com) (opens new window)

基于LXD搭建多人共用GPU服务器,简单易用,全网最详细! (cdsy.xyz) (opens new window)

用LXC/LXD搭建实验室多GPU共享系统用于深度学习 - 知乎 (zhihu.com) (opens new window)