V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Cineray
V2EX  ›  程序员

有什么方便的实验室共享 GPU 方案?

  •  
  •   Cineray · 2024-03-12 16:33:43 +08:00 · 5271 次点击
    这是一个创建于 366 天前的主题,其中的信息可能已经有所发展或是发生改变。

    实验室一台服务器大概有 10 多个人用,以前都是使用一个账号,大家合理分配时间。

    现在老师要求各自建立自己的账号,但是有一个问题,因为大家的运行环境不一样,包括 cuda/python 版本等。

    所以我想建立一个隔离环境,大家有一定的 sudo apt 权限,但是又不会因为环境冲突装坏系统。

    目前看到的是有的用 docker/LCX ,感觉有些臃肿,求问有没有更好的方式?

    如果有管理器就更好了,方便及时添加/删除用户。

    另外我们有多台机器,有什么好的方法可以智能分配账号/算力资源吗?

    38 条回复    2024-03-13 16:30:20 +08:00
    dododada
        1
    dododada  
       2024-03-12 16:38:21 +08:00
    docker 。
    我记得站里有个这种帖子的。
    jiny2048
        2
    jiny2048  
       2024-03-12 16:39:49 +08:00
    装好必要的软件,不给 sudo 权限,每个人自己用 conda
    多台服务器用 ansible 分发/管理帐号
    gpu 没必要做分配/虚拟化,抢占式/商量着来就行了
    litguy
        3
    litguy  
       2024-03-12 16:40:26 +08:00
    docker 或者 lxd
    个人更喜欢后面这个,因为和虚拟机用起来差不多
    hallDrawnel
        4
    hallDrawnel  
       2024-03-12 16:42:29 +08:00
    和 2 楼差不多,不给 sudo 权限,每个人自己用 conda 管理自己的环境就行,驱动管理员负责更新。
    然后大家去抢就好了 10 个人。
    retanoj
        5
    retanoj  
       2024-03-12 16:44:10 +08:00
    要是想在操作系统级别支持自定义安装软件,那还是 docker / LCX 吧。
    不是臃肿的问题,是你给了 sudo 一定滥用和冲突。
    CheckTime
        6
    CheckTime  
       2024-03-12 16:44:18 +08:00
    硬盘够大就行,每个人登录在自己目录下面安装自己的 conda 环境。不用给 sudo 权限,有必须要装的系统包打申请
    steveway
        7
    steveway  
       2024-03-12 16:49:58 +08:00
    https://github.com/shenuiuin/LXD_GPU_SERVER
    目前在用是这个方案,确实如楼上朋友所说,需要硬盘够大。
    但其实用下来,除了 lxc 完全隔离之外,小问题还是有不少的,如果实验室对 linux 都比较熟悉,直接分帐号使用就好了。
    happyxhw101
        8
    happyxhw101  
       2024-03-12 16:54:15 +08:00
    cuda 统一版本
    每个人建自己的账户,/home/xxx ,用 conda 安装自己的 python 环境
    不给 sudo 权限,需要安装软件的统一一个人负责
    Busby
        9
    Busby  
       2024-03-12 16:56:40 +08:00
    Docker 大法好。非计算机专业很难保证每个人的水平,还是各玩各的好。
    guoyijun163
        10
    guoyijun163  
       2024-03-12 16:57:24 +08:00
    用 pve+container(LXC),pve 宿主机上装显卡的 kernel 驱动,container 里装运行时(不过这样驱动版本是需要一致匹配的)
    大家各自拿着一个 container 有 root 权限,除了动不了 kernel ,换不了驱动版本外其他都能自己装
    bjtujtonlyone
        11
    bjtujtonlyone  
       2024-03-12 16:59:13 +08:00
    CUDA 就装一个,包括一些臃肿的数据集都是在管理员目录,有命令可以软链接;其他的 python 环境用户自己 conda 虚拟。
    bthulu
        12
    bthulu  
       2024-03-12 17:39:52 +08:00
    一人买一台服务器不久好了
    binarywizard
        13
    binarywizard  
       2024-03-12 17:45:04 +08:00
    可以使用英伟达的 MIG 方案,切分 GPU 卡
    jacy
        14
    jacy  
       2024-03-12 17:51:39 +08:00
    hyper-v 开小鸡分给大家,虽然臃肿,但大家想怎么搞怎么搞
    Woolaman
        15
    Woolaman  
       2024-03-12 18:05:38 +08:00
    不太理解。既然是服务器,当然每个人有自己的账号啊,不然怎么写代码、debug 、看数据?
    至于计算资源的分配,用专门的资源调度软件管理不就行了吗,例如 slurm 、htcondor 。
    你把作业提交上去,别人的作业结束了,你的任务就开始了啊,大家协商一下最大作业时间就行了,例如 48h 、72h 。
    我是做物理的,蒙卡模拟啥的,要是说错了,勿喷!
    dode
        16
    dode  
       2024-03-12 18:53:57 +08:00
    Docker ,每个用户独立使用私钥登录,都加入到 docker 组
    hiphooray
        17
    hiphooray  
       2024-03-12 19:15:35 +08:00
    遇到了同样的情况,4 个人用,而且并没有专人负责服务器的维护工作。
    因此为了方便起见,每个人都申请自己独立的拥护,自己维护自己的开发环境,然后配上了足够大容量的硬盘。
    GPU 分配就更粗暴了,在微信群里喊一声,用了哪张卡,要用多久,就行了。
    Huelse
        18
    Huelse  
       2024-03-12 19:38:51 +08:00
    不要给 sudu 权限,遇到不懂非要硬来的直接给你搞崩
    Argon
        19
    Argon  
       2024-03-12 20:36:43 +08:00   ❤️ 1
    我这边用下来有个提醒。楼上说的 Docker 方案,假如 Docker 自身不是 rootless 的,那么有权限使用 docker 的用户实质上都能提权到 root 。我这边就遇到挂载 / 然后搞事的同学。
    该帖其它楼的方案,比如 Proxmox VE 用 CT 共享 GPU 或者 LXD 共享,相比 Docker 的坏处是,对于缺少虚拟化经验的同学而言容易接触的资料不如 docker pull 来得多。但是话又说回来,写不明白 Dockerfile 只会连进容器内部敲命令的大有人在。搞不好他还会想装个 openssh-server ,这时候有着完整 systemd 支持的 LXC 容器,比 docker container 那就阳间太多了。
    对于 LXD 有一个挺漂亮的 Web 面板,可以试试: https://lxdware.com/
    2xvaHoK2LGxQ29R5
        20
    2xvaHoK2LGxQ29R5  
       2024-03-12 20:57:55 +08:00 via Android
    几种办法
    1.设备独享型,使用 openlava 配置一下,没人按需按时间抓机器丢任务去跑,优点:应用兼容性好。缺点:容易造成资源浪费(比如一个人跑的任务可能只用很少的 GPU ,但是整个机器都归他了)
    2.vgpu 共享型,去买个 NVIDIA vgpu 的授权,然后每台服务器可以去配置资源分割。优点:不浪费 GPU ,缺点:应用程序支持可能有限。
    3 VGPU+调度器型:算是 1,2 的合体,用 vgpu+opennebula 。缺点是一二缺点的集合体,再加上配置估计不简单。
    debuggerx
        21
    debuggerx  
       2024-03-12 21:19:47 +08:00 via Android
    把服务器部署成 runner 你们提交任务上去 排队执行
    skies457
        22
    skies457  
       2024-03-12 21:48:21 +08:00   ❤️ 1
    目前实验室正在使用的方案:
    - Kubernetes 作为集群基础架构
    - GitLab 提供单点登录服务
    - Harbor 提供自定义环境的镜像托管
    - JupyterLab ( https://z2jh.jupyter.org/en/stable/)为每个人提供可选配置的独立执行环境
    ruimz
        23
    ruimz  
       2024-03-12 22:28:37 +08:00 via iPhone
    open ondemand ,开源 HPC 管理
    https://github.com/OSC/ondemand
    flyqie
        24
    flyqie  
       2024-03-12 22:42:16 +08:00
    这类环境最好不要用 docker 。。

    docker 在这类环境下隔离不太好做。

    要上的话建议 lxc 或者它的上层 lxd 。
    ruimz
        25
    ruimz  
       2024-03-12 23:00:22 +08:00 via iPhone
    @ruimz 这个 ondemond 可以分账号,一个账号搞坏不破坏系统,cuda python 不同版本环境隔离,有网页管理,支持多机集群,支持网页直接开 Jupyter notebook 。
    一开始是给学校用超算开发的,所以和楼主描述的实验室环境的需求几乎完全一致
    Cineray
        26
    Cineray  
    OP
       2024-03-13 00:33:47 +08:00
    @ruimz #25 感谢推荐,不过部署 HPC 有点大炮打蚊子的感觉😂
    xudong
        27
    xudong  
       2024-03-13 01:37:09 +08:00 via iPhone
    kubeflow
    good4you
        28
    good4you  
       2024-03-13 03:27:38 +08:00   ❤️ 1
    鄙人有五年 HPC 使用经验,推荐使用:slurm

    这个已经是很完善的体系,在北美非常常见,从高校到美国国防部都在使用。由于系统发展比较成熟,部署难度很可能远小于自己捣鼓 docker 之类的。具体的我没有了解,还请楼主移步: https://slurm.schedmd.com/documentation.html
    terencelau
        29
    terencelau  
       2024-03-13 07:42:21 +08:00
    只有一台服务器的话就 Docker 部署 JupyterHub 吧,文件上传下载还可以部署一个 file browser ,如果能多几台服务器再考虑 K8S 或者 SLURM 。我现在用的方案是 K8S 底座 + Kubeflow
    ttyhtg
        30
    ttyhtg  
       2024-03-13 08:19:22 +08:00 via Android
    看了楼上诸位回复,受益良多,哈哈
    totoroyyw
        31
    totoroyyw  
       2024-03-13 08:43:07 +08:00
    SLURM 或者 Docker 挂显卡
    stevenshum
        32
    stevenshum  
       2024-03-13 09:04:59 +08:00
    看到很多人推荐 HPC ,想问一下单台服务器怎么部署和使用 HPC ?
    dayeye2006199
        33
    dayeye2006199  
       2024-03-13 09:18:40 +08:00 via Android
    多账号 ssh 和 conda

    conda 可以管理 cuda 版本的吧?
    Sayuri
        34
    Sayuri  
       2024-03-13 09:30:12 +08:00
    用 nvidia-container-runtime 来在 docker 里面跑 GPU 。
    大家约定好一个固定的 cuda 版本,硬性要求环境用容器部署就行了。
    Famio
        35
    Famio  
       2024-03-13 10:40:32 +08:00
    我的想法是 lsf ,虚拟化都不用做,大家的任务都丢队列,顺序处理,架构上来说很省事,原生 linux os 该咋用咋用,没有虚拟化、容器化的运维负载。
    ZedRover
        36
    ZedRover  
       2024-03-13 11:02:47 +08:00
    cuda 不统一版本最好用 docker ,宿主机上用最新的 nvdriver ,容器内 cuda 版本随意。用 conda 只能解决 python 环境,很多上古代码需要很低的 cuda 版本才能跑起来,很多 torch 2 的新功能需要新的 cuda ,不是说一句统一版本就能解决的
    pslucifer
        37
    pslucifer  
       2024-03-13 15:40:45 +08:00
    @skies457 正解
    doublebu
        38
    doublebu  
       2024-03-13 16:30:20 +08:00
    用 LXD ,有大佬已经写过教程了: https://zhuanlan.zhihu.com/p/421271405

    目前白嫖朋友的工作站就是这样的,除了 GPU 外,自己装 tailscale 这种组网工具也可以,而且有 systemd 的支持.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1034 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 80ms · UTC 22:36 · PVG 06:36 · LAX 15:36 · JFK 18:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.