V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
rjagge
V2EX  ›  程序员

老板新到了一个服务器,我应该如何配置,并做一个优秀的管理员?

  •  1
     
  •   rjagge · 2023-07-05 21:49:41 +08:00 · 6406 次点击
    这是一个创建于 506 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,老板拿了一个全新的服务器给我管理,有四张 4090 给组内的同学使用。我们主要是搞机器学习,所以 conda 这些就够了。

    那么问题来了:

    1. 如何最干净地装 conda 然后管理 python 环境呢?

    以及以前用服务器都是以 user 身份,或者一台机器就我一个人 root 随便用,我不太清楚如何才能做好不同用户的权限管理和数据管理。对此,有没有相关经验的老哥传授给小弟一些经验呀?

    1. 如何做到 user 们的权限和数据空间分配?

    最后,有其他任何关于服务器运维有用的小建议也希望老哥们不吝赐教~小弟在这里先谢谢了🙏

    43 条回复    2023-07-10 16:38:22 +08:00
    evalfun
        1
    evalfun  
       2023-07-05 21:58:28 +08:00   ❤️ 3
    装 pve 开虚拟机直通显卡,一人分配一个虚拟机。环境玩坏了直接重置虚拟机
    my3157
        2
    my3157  
       2023-07-05 22:01:59 +08:00 via Android
    人多的话 pve 可以开 sriov
    LeegoYih
        3
    LeegoYih  
       2023-07-05 22:03:31 +08:00
    容器沙盒
    Chipmunker
        4
    Chipmunker  
       2023-07-05 22:13:29 +08:00
    装 SLURM
    GoodRui
        5
    GoodRui  
       2023-07-06 01:29:03 +08:00 via Android
    容器不就是干这个的吗?
    ysc3839
        6
    ysc3839  
       2023-07-06 01:55:48 +08:00
    建议用 Docker 开容器给下面的人用,这样对主系统来说是最干净的,也不用担心 CUDA 版本问题
    lithiumii
        7
    lithiumii  
       2023-07-06 02:46:26 +08:00 via Android   ❤️ 1
    公用服务器就 slurm 呗,一般的集群都用这个。Conda 装到 /opt ,每个普通用户自己的环境可以放各人的 home 。

    Docker 只是隔离一个个应用而已,而且万一不同人用的镜像不一样,难道都加到 Docker 用户组吗。不过如果大家都是 Python ,也可以 Docker 部署 JupyterHub ,每人分发 jupyter 的账号。
    dayeye2006199
        8
    dayeye2006199  
       2023-07-06 02:54:52 +08:00
    jupyterhub 把
    tin3w5
        9
    tin3w5  
       2023-07-06 04:44:13 +08:00   ❤️ 51
    第一步,配置好带外管理,正经服务器都是有带外管理的,比如 HPE 的 iLO ,Dell 的 iDrac 。配置好之后就可以远程安装系统或紧急救援了,只要硬件不坏,人就不用往机房里跑。
    第二步,硬件服务器装系统之前一定要好好查查服务器操作系统的支持 matrix ,发行版、大小版本号一点都不能差。相信我,千万别听某些脑残粉让你无脑装什么 Debian 、Gentoo 、Arch 之类的。选择操作系统支持列表里有的,除非你做好了坏了一块硬盘、电源这种屁大点事的小故障或者升级个板卡固件都要被硬件厂商客服强制要求把系统重装回操作系统支持列表中的系统的准备(是啊,要不人家就不给你换硬件,如果升级固件失败导致板卡无法使用,且当时不匹配的操作系统信息被记录到硬件日志里,某些厂商会直接认为是人为损坏,不予保修)。当然,如果你们公司就是有钱,能买得起硬件服务器的大客户支持账号,由硬件厂商给你定制你想要的发型版,那就随你喜欢。
    第三步,在操作系统安装好之后安装虚拟化服务,具体用什么你根据自己的喜好定。Windows Server 可以选择 Hyper-V 、VirtualBox ,或者直接无脑上 ESXi (毕竟是服务器,完全不用考虑驱动兼容问题),我是比较喜欢直接用 KVM 的。当然,如果你 Virsh 命令不熟,可以考虑 Proxmox VE 。
    第四步,给四个人分别创建创建虚拟机,创建好之后 ssh key 分配给他们,给他们配置好 sudo 权限,root 的账号密码自己管理。把对应的 GPU 挂到他们对应的虚拟机里,这样就算他们玩上天,顶多就是把自己的虚拟机玩炸了,理论上不会影响其他人正常用。记住,宿主机的 ssh private key ,谁也不要给。如果老板跟你要权限,给他加新的 ssh key ,之后就老老实实的做好备份工作(永远不要在脑子里存在这样的概念“我的老板不会在上面乱搞”、“我的老板不会给喜欢乱搞/容易犯错的白痴加权限”)。
    第五步,做好初始的 snapshot ,然后写一个 cron job ,每周 snapshot 一次,面的哪天谁玩脱了过来找麻烦。
    第六步,记得把 sar 启动起来,或者给自己也开一台虚拟机用来监控宿主机的运行状况,如果发现有搞事情的(比如疯狂读写硬盘、疯狂吃 CPU 等、疯狂占网络资源),就用 cgroup 、tc 之类的做好限制。
    第七步,一切业务稳定了,记得给线标好号,包括电源线和网线。你可以保证你不会做傻事、拔错线,但是你不能阻止其他人脑子不抽,你要做的是尽可能防止别人在你管理的资源上做傻事。
    行了,做到这七步,估计能应付 95%以上的问题。
    ltkun
        10
    ltkun  
       2023-07-06 05:45:58 +08:00 via Android
    pve 加 vgpu 不过 4090 民用显卡还不支持 vgpu
    defunct9
        11
    defunct9  
       2023-07-06 07:02:42 +08:00 via iPhone   ❤️ 13
    开 ssh ,让我上去看看
    catsoul
        12
    catsoul  
       2023-07-06 08:16:45 +08:00   ❤️ 2
    @defunct9 ssh 哥神出鬼没弹无虚发
    blankmiss
        13
    blankmiss  
       2023-07-06 08:26:03 +08:00
    @ltkun 要分配的话就只能直通使用
    liantian
        14
    liantian  
       2023-07-06 08:48:27 +08:00
    不支持 vGPU ,分配虚拟机用就太低效率了...而且万一第五个人要用咋整。

    卡死了不给 sudo 不给 root ,其实靠 linux 的权限隔离,每个人一个用户也够了。
    Gunslinger
        15
    Gunslinger  
       2023-07-06 09:06:29 +08:00
    D O C K E R
    Chipmunker
        16
    Chipmunker  
       2023-07-06 09:34:41 +08:00   ❤️ 4
    @tin3w5 看 OP 的描述,可能是学校科研用的机器。这种机器用虚拟机不是一个好的方案。虚拟机的计算资源一般是固定的(可能有自适应分配计算资源的技术?)。学生科研一般适合抢占式的任务分配系统,例如 SLURM 和 OpenPBS 。这样做的好处是,如果这几天其他三个同学摸鱼,剩下的一个同学可以同时使用 4 张卡快速完成计算,使 GPU 的利用率最大化。

    基于我对以上应用场景的猜测。我有以下一些建议:

    1. 建议安装 Environment Modules ( https://github.com/cea-hpc/modules) 来管理 conda/python 版本,可以提前配置好常用软件的最近几个版本,便于使用者选择调用;
    2. 建议安装 SLURM 调度计算资源;
    3. 建议再购一台 NFS 服务器存储用户数据和一部分公用数据,这样一方面数据的安全性更有保障,另一方面在后续添置新机器时数据更容易迁移或互通。

    4. 配置仅内网访问,锁死内核,没有必要千万不要升级内核,一个修订号更新都可能搞出兼容性问题。
    alteremliu
        17
    alteremliu  
       2023-07-06 09:49:22 +08:00
    先挖几天回本再说
    rjagge
        18
    rjagge  
    OP
       2023-07-06 10:43:35 +08:00
    @tin3w5 谢谢老哥,很有帮助很细致啊!!我们应该是直接在你说的第三步上进行操作。我们只是收到了一个有 root 权限的账号,物理上面的运维是学校在管。
    rjagge
        19
    rjagge  
    OP
       2023-07-06 11:08:56 +08:00
    @Chipmunker 谢谢老哥, 我先研究研究。我目前在看是用虚拟机的路线,还是你说的这种路线
    rjagge
        20
    rjagge  
    OP
       2023-07-06 11:10:07 +08:00
    @my3157
    @evalfun
    @ltkun 目前估计不超过五个人,所以有必要用 pve 吗
    rjagge
        21
    rjagge  
    OP
       2023-07-06 11:10:39 +08:00
    @alteremliu 学校的运维有监控的,看你挖矿直接一个红牌警告
    my3157
        22
    my3157  
       2023-07-06 11:17:54 +08:00 via Android
    @rjagge 有,现在虚拟化几乎不损失性能,做好隔离最重要,不然不给 root 权限,有些操作又需要,不给等开一次误操作啥的,就该哭了
    salmon5
        23
    salmon5  
       2023-07-06 11:19:13 +08:00
    想了下,还不如弄个云账号,物理机折腾起来太烦了,但是学生有时间
    dann73580
        24
    dann73580  
       2023-07-06 11:31:08 +08:00
    如果会配置,虚拟机的优势还是比较明显的,资源隔离,虚拟机玩炸了也不怕炸母鸡。如果考虑到抢占需求可以适当超配一些资源。
    bitllion
        25
    bitllion  
       2023-07-06 11:34:18 +08:00   ❤️ 1
    作为一名 HPC 管理员,没必要用 pve ,虽然我这里部分生产环境的机器用了 pve 做 a100 直通,但对于你们人少后续维护不是很方便。给你这样的规划:
    thinkershare
        26
    thinkershare  
       2023-07-06 11:35:44 +08:00
    没啥好办法,这个场景我也遇到过,每种解决方案都有问很多问题。要不性能不行,要不普通用户有时候也需要 root 权限来实施一些操作,这个时候作为管理员的你就需要帮他们做一些维护工作了。推荐 docker 的都是有坑,不要用 docker.
    sunny2580839896
        27
    sunny2580839896  
       2023-07-06 11:36:55 +08:00
    ssh 哥,内网咋给你开
    sunny2580839896
        28
    sunny2580839896  
       2023-07-06 11:37:30 +08:00
    我有预感,你这帖子 ssh 哥肯定会来
    bitllion
        29
    bitllion  
       2023-07-06 11:38:57 +08:00
    @bitllion slurm 做调度,还可以配置 mail 提醒作业状态,zerotire 等 vpn 做异地 vpn,放假出差在外也能连 server ,使用 spack 包管理器安装软件,软件都是 root 安装,普通用户只有使用权限
    rjagge
        30
    rjagge  
    OP
       2023-07-06 11:39:50 +08:00
    @bitllion 我等你的规划:
    rjagge
        31
    rjagge  
    OP
       2023-07-06 11:41:42 +08:00
    @bitllion 收到,slurm zerotire spack 这些我都不太清楚,我去研究研究下!
    EVANGELIONAir
        32
    EVANGELIONAir  
       2023-07-06 13:27:02 +08:00
    入学的时候组里准备搞深度学习,我负责维护,搞了四五台,多卡、8 卡都有,扔实验室地下室,教育网公网 ip ,校内可直接远程访问,bios 开断电后来电自启
    所处专业和计科完全不搭边,同门的计算机水平都挺拉,考虑到网上资料比较多用的是 ubuntu ,同门遇到问题比较好查资料解决,就用了 ubuntu 22.04 lts ,每个人都给了管理员权限(这应该是错误做法,但考虑同门计算机水平我觉得做不出什么奇葩事,再加上基本环境我都配好了他们也不需要装什么包,以后会考虑关掉权限),远程就靠 xrdp 或者 ssh 弄带 gui 不无 gui 的,一方面还可以直接用控制端用 pycharm 或者 vscode 远程
    装了 anaconda pycharm matlab ,基本上软件都进/opt 文件夹这样每个用户都能用到不用重复装,conda 的新建 env 都在每个用户自己的文件夹下,有效隔离开
    cuda 也装了最新的,我认为 cuda 版本没什么好纠结的,毕竟 conda 新建 env 后环境隔离的,本机 cuda 版本不影响环境

    我也算是被强行拉来负责这块内容的,主要是以前虚拟机玩过好几次不同发行版,大概清楚一个操作情况

    这些服务器的配置做法肯定是有问题的,我暂时说一下我的情况,如果各位有建议也希望多提

    总之现在比较后悔用 ubuntu ,应当用 debian ,尤其是 12 开放非自由固件
    defunct9
        33
    defunct9  
       2023-07-06 13:57:27 +08:00
    @sunny2580839896 我早就来了。我来操作的话,和 tin3w5 说的完全一致。用 kvm ,保证宿主机的干净整洁。多开台虚机跑 prometheus 和 grafana 监控,没啥了。
    wangmou
        34
    wangmou  
       2023-07-06 13:59:44 +08:00
    楼上实验室怎么这么复杂。。。我们都是多卡 T4 ,直接一个人分一个普通账号就行了。每个人自己安装 conda 在自己 home 下互不冲突,每个人没有权限杀死别人的进程或者删除别人的文件。CUDA 由管理员控制,大家固定一个版本号使用,这就够了。
    wangmou
        35
    wangmou  
       2023-07-06 14:02:31 +08:00
    尤其是楼上分配虚拟机的方案,某一学生同时需要多卡怎么办,不给他用还是去后台重新分配资源?
    tin3w5
        36
    tin3w5  
       2023-07-06 14:02:37 +08:00 via iPhone
    @rjagge @Chipmunker 忘记了现在都流行管导师叫老板的事情了……😂

    其实有的时候选择虚拟化也是没办法,大家的水平参差不齐,有的人可能连基本操作都不会,有的人可能看着网上的文章就傻逼呵呵的升级系统 glibc ,升级完之后发现崩了……天天处理这些鬼畜问题,自己的事情还要不要做了?他们可能后因为某些事情或者特定的需求要求必须要获得 root 权限(比如要操作 selinux 、iptables 等),你给他一个虚拟机的 root ,他如果作死死就死他一个。如果没有虚拟化,就是大家一起给他陪葬。
    之前就有学弟喝酒的时候说过,出现过情人节整根女友 papapa ,一个夺命连环 call 过来说第二天要搞一个什么展示,但是系统被某个白痴搞坏了,要求当天晚上必须搞好……嗯,当天晚上的确搞好了,但是他彻底萎了。
    拿多少钱办多大事,真的有多个 gpu 使用的需求,找老板批条子去。不要想着给别人多创造多少福利,先想好做了某些事情会不会因此而背锅才是正道。
    yulgang
        37
    yulgang  
       2023-07-06 14:50:40 +08:00
    给我也开个 ssh 看看
    nightwitch
        38
    nightwitch  
       2023-07-06 15:37:17 +08:00 via Android
    实际管过 gpu hpc 差不多一年,虚拟机的方案就是扯淡。机器学习经常要调用多张 gpu 一起训练,不支持 vGPU 的显卡实现不了
    nightwitch
        39
    nightwitch  
       2023-07-06 15:41:14 +08:00 via Android
    用 slurm 这种任务调度的软件是最方便的,超算用户都在用。会自动调度任务,让不同用户的任务排队跑,不会互相争抢资源。
    DissDoge
        40
    DissDoge  
       2023-07-06 16:23:40 +08:00
    对于服务器管理和权限管理的,以下是一些建议:
    1. 安装和管理 Conda:可以按照 Conda 官方文档提供的指引进行安装。确保选择适合服务器操作系统的安装方式,并按照最佳实践设置 Conda 环境。安装后,您可以使用 Conda 创建和管理 Python 环境,方便团队成员进行机器学习工作。

    2. 用户权限和数据空间分配:可以采用以下方法来管理用户权限和数据空间:

    - 创建用户账号:为每个团队成员创建独立的用户账号,以便管理和跟踪各自的活动。
    - 文件和目录权限:设置文件和目录的适当权限,以确保用户只能访问其所需的数据和资源。使用 UNIX 文件权限(如 chmod 和 chown )可以精确控制用户对文件和目录的访问权限。
    - 用户组管理:将用户分配到适当的用户组中,并设置组级别的权限,以便共享资源和数据。
    - 存储配额:如果需要限制用户的数据空间使用量,可以使用存储配额功能。这样可以确保用户不会占用过多的存储空间。

    3. 其他服务器运维建议:

    - 定期备份:设置定期备份策略,确保服务器上的重要数据得到备份,以防数据丢失或损坏。
    - 安全更新:及时更新服务器操作系统和软件包,以修复安全漏洞并提高系统稳定性。
    - 日志管理:配置适当的日志记录,以便跟踪服务器活动和故障排除。
    - 监控和警报:设置服务器监控系统,以实时监测服务器性能和资源使用情况,并设置警报以便及时响应问题。
    - 强密码策略:要求用户使用强密码,并定期更新密码,以提高服务器的安全性。

    这些建议是一般性的指导,具体的服务器管理和权限管理操作可能会因你的服务器配置和需求而有所不同。在实施之前,建议仔细阅读相关文档、参考最佳实践。。。
    HFX3389
        41
    HFX3389  
       2023-07-06 16:58:06 +08:00
    @DissDoge #40 你这回复像是 AI 生成的...最新的一条也像
    rjagge
        42
    rjagge  
    OP
       2023-07-06 17:10:20 +08:00
    @bitllion 大哥。我现在 root 安装了 spack 并按照官方教程配置了环境变量 . /root/spack/share/spack/setup-env.sh

    可是 user1 的 spack 的环境变量如何配置呢?我把上面的命令放到 user1 的 bashrc 里面,source bashrc 会有权限不够的问题。。
    我就是想实现你说的“使用 spack 包管理器安装软件,软件都是 root 安装,普通用户只有使用权限”。
    bitllion
        43
    bitllion  
       2023-07-10 16:38:22 +08:00
    @rjagge 可以试试 upstreams.yaml https://spack.readthedocs.io/en/latest/chain.html 类似这样 upstreams:
    spack-instance-1:
    install_tree: /path/to/other/spack/opt/spack
    modules:
    tcl: /path/to/other/spack/share/spack/modules
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   923 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 20:57 · PVG 04:57 · LAX 12:57 · JFK 15:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.