前言

最近好久没写博客了,事情太多了,我还搞了个新的好玩的项目,等后续做得差不多了来写篇文章介绍一下。

在我们目前的AI项目中,团队需要共同使用一台GPU服务器来做模型训练和数据处理。为了让每个团队成员都能高效地使用这台服务器,我们决定设置一个多用户共享环境。这样,无论是代码开发、模型测试还是结果验证,所有人都可以方便地访问并利用服务器的强大算力。

本文将记录一下配置Linux共享环境的过程,同时也希望能帮助那些面临类似需求的团队。

设置用户和组

要有效管理我们的GPU服务器,首先需要创建新的用户账户,并将这些账户组织到一个专门的用户组中。这样做可以更容易地管理权限和访问控制。

创建用户和组

先创建个组

sudo groupadd gpugroup

接下来创建用户

sudo adduser [用户名]

然后把用户添加到组里面

sudo usermod -a -G gpugroup username

配置SSH公钥登录

为了让团队成员能够安全地通过SSH连接到服务器,统一使用公钥认证,禁止密码登录。

每个用户需要生成一对密钥(如果还没有的话),并将公钥发送给管理员。然后,管理员需要将这些公钥添加到用户的 .ssh/authorized_keys 文件中。

首先,确保每个用户的 home 目录下都有 .ssh 目录,如果没有,可以使用下面的命令创建:

sudo mkdir /home/[用户名]/.ssh
sudo chmod 700 /home/[用户名]/.ssh

然后,将公钥添加到 authorized_keys 文件中:

echo [公钥内容] >> /home/[用户名]/.ssh/authorized_keys
sudo chmod 600 /home/[用户名]/.ssh/authorized_keys

替换 [用户名][公钥内容] 为实际的用户名和公钥。

创建共享文件夹

之前我把代码放在 home 目录下,不过实践中发现这样不利于共享。

毕竟把某个用户 home 目录下的一个文件夹设置为共享目录,让其他用户访问,总觉得怪怪的。

通常为了安全性和组织性,还是创建一个专门的目录用于共享项目比较好,问了GPT是这么说的

安全性:避免不必要的权限泄露。当你将项目放在个人家目录下时,可能会不小心赋予其他用户过多的访问权限,这可能导致敏感信息的泄露或不小心的数据损坏。

易管理性:一个专门的共享目录使得管理更为简单明了。你可以轻松控制谁可以访问这个目录,而不必担心影响到其他个人数据或设置。

扩展性:随着团队的增长,可能会有更多的用户需要访问这些共享资源。有一个独立的共享目录可以更方便地管理用户和权限,而不是不断调整家目录下的权限设置。

清晰的权限界定:独立的共享目录让权限的设置和调整变得更加清晰和简单。例如,可以针对这个目录设置定制的安全策略和备份策略。

所以我在 /srv 目录里创建了一个目录 /srv/projects 用来共享。

组权限设置

接下来,将团队共享的项目文件夹 /srv/projects 的所有权设置给 gpugroup 组。

sudo chown -R root:gpugroup /srv/projects
sudo chmod -R 775 /srv/projects

设置SGID(Set Group ID)

SGID 是一个特殊的权限设置,它确保在一个目录下创建的任何新文件或目录都会自动继承该目录的组。这非常适合我们的项目目录,因为它可以让团队中的所有成员都能访问和修改文件,而不必担心单个文件的组设置。

你可以使用以下命令来设置SGID位:

sudo chmod g+s /path/to/directory

例如,如果我们的项目目录是 /srv/projects,命令将是:

sudo chmod g+s /srv/projects

这样设置后,所有在 /srv/projects 下创建的新文件和目录都将自动设置为该组,保持权限的一致性。

调整 umask (optional)

PS: 我没有设置这个,可以但没必要

umask 是一个系统设置,决定了新创建的文件和目录的默认权限。为了确保团队成员可以编辑彼此的文件,我们需要设置一个合适的 umask 值。

通常的 umask 值是 022,这意味着新创建的文件默认权限是 644(用户可读写,组和其他人可读),新目录的默认权限是 755(用户可读写执行,组和其他人可读执行)。为了团队协作,我们可以设置 umask 为 002,这样新文件的权限为 664(用户和组可读写,其他人可读),新目录的权限为 775(用户和组可读写执行,其他人可读执行)。

可以通过以下命令临时改变 umask 值:

umask 002

为了永久改变,需要在用户的 shell 配置文件中设置,比如 .bashrc.profile

echo "umask 002" >> ~/.bashrc

其他

还有一些细节的,比如我之前把 conda 装到 home 目录里了

现在也得重新在 /srv/apps 里安装,原本在 home 里的就不要了

这样所有用户都能共享 python 的虚拟环境

复制文件时显示进度

cp -R 命令不支持显示进度

可以使用 rsync 或 pv 代替

rsync

rsync -ah --progress source destination

参数解释:

  • -a 是归档模式,它保留符号链接、文件权限、用户组信息等。
  • -h 使输出更易于阅读,使用人类可读的格式。
  • --progress 显示复制进度。

pv

这个是搭配压缩工具使用的,有些系统不自带,可能得先安装。

tar cf - source/ | pv | tar xf - -C destination

这个命令将 source 目录打包并通过 pv 显示进度,然后在 destination 目录中解包。

小结

这样设置下来就基本搞定了

我最近还探索了一些项目管理工具,部署了 MatterMost

接下来可以写文章记录一下。

为团队配置Linux环境,简单高效的项目共享方案的更多相关文章

  1. VSCode配置c++环境简单教程

    VSCode配置c++环境简单教程 1.下载MinGW 安装有关gdb,gcc,g++的所有包 2.文件夹 打开一个文件夹 在里面随便写一个cpp 不管是VS还是VSCode,它的基本操作单位都是文件 ...

  2. eclipse弃坑记第一篇之在idea上配置Tomcat环境并创建Javaweb项目的详细步骤原创

    IntelliJ IDEA是一款功能强大的开发工具,在代码自动提示.重构.J2EE支持.各类版本工具(如git.svn.github).maven等方面都有很好的应用. IntelliJ IDEA有免 ...

  3. Linux环境下第一次提交项目

    Linux环境下第一次提交项目: vi 日记 新增一个文件名为“日记”的文件 git status 工作区的状态 git add 日记 建立跟踪 git commit 提交变更 ----------- ...

  4. linux下配置python环境 django创建helloworld项目

    linux下配置python环境 1.linux下安装python3 a. 准备编译环境(环境如果不对的话,可能遇到各种问题,比如wget无法下载https链接的文件) yum groupinstal ...

  5. Hadoop第一式:配置Linux环境

    所有操作在虚拟机下完成,虚拟机软件选用VMware Workstation Pro 12 (后文简称为VM) 关于Linux安装不再阐述一.网络环境配置 1)Windows界面 首先在VM页面,点击虚 ...

  6. 三种配置linux环境变量的方法(以java为例)

    1.先确认是否为openjdk:参考 2. 修改/etc/profile文件  如果你的计算机仅仅作为开发使用时推荐使用这种方法,因为所有用户的shell都有权使用这些环境变量,可能会给系统带来安全性 ...

  7. 【转】Linux环境进程间通信(五) 共享内存(上)

    转自:https://www.ibm.com/developerworks/cn/linux/l-ipc/part5/index1.html 采用共享内存通信的一个显而易见的好处是效率高,因为进程可以 ...

  8. <转>Linux环境进程间通信(五): 共享内存(上)

    http://www.ibm.com/developerworks/cn/linux/l-ipc/part5/index1.html 采用共享内存通信的一个显而易见的好处是效率高,因为进程可以直接读写 ...

  9. ASP.NET Core Linux环境安装并运行项目

    原文地址:https://blog.csdn.net/u014368040/article/details/79192622 一 安装环境 1.  从微软官网下载 Linux版本的.NetCoreSd ...

  10. (一)配置linux环境实现持续集成

    目录 1.Centos7操作系统 2.Gnome 可视化桌面 3.远程shell工具 4.远程桌面工具 5.Jdk 6..Net Core 7.Git 8.Docker 容器 9.Kubernetes ...

随机推荐

  1. itest(爱测试) 4.5.1 发布,开源BUG 跟踪管理 & 敏捷测试管理软件

    本次发布一共6个更新(其中一个4.5.0的重大BUG,不得不先发布4.5.1).4.5.0中增加ldap 登录支持时,引入一个BUG,新增的itest本地用户不能登录,除非重启.  V4.5.1详情如 ...

  2. 【VMware vSphere】使用vSphere Lifecycle Manager(vLCM)管理独立主机和集群的生命周期。

    vSphere Lifecycle Manager(vLCM)是 vSphere 7 中引入的一项新功能,它提供了一种集中式.自动化和简单性的方式来管理和升级 vSphere 基础架构组件(如vCen ...

  3. WEB攻防-代码特性

    WEB攻防-代码特性 目录 WEB攻防-代码特性 ASP 如何判断网站搭建是否是asp ASP常见的搭配组合 ASP语言的漏洞点(从哪一方面入手) ASP-数据库-MDB下载 ASP-数据库-ASP后 ...

  4. Manim使用心得

    Manim 使用心得 manim 做视频还是挺方便的. 当然,如果你每一次都从 0 开始写,那么你会崩溃. 所以需要找到自己做视频的风格,以此总结出一套通用的 python 模板代码,然后调用. 例如 ...

  5. kettle从入门到精通 第二十七课 邮件发送

    1.我们平常在做数据同步的时候,担心转换或者job没有正常运行,需要加上监控机制,这个时候就会用到邮件功能. 下图是一个简单的测试邮件发送功能的转换.在kettle.properties文件中设置邮件 ...

  6. WIN11 WINDOWS 11 INTEL 12-13代大小核默认调度策略

    WIN11 WINDOWS 11 INTEL 12-13代大小核默认调度策略 生效的异类策略:使用异类策略0. 异类线程调度策略:自动. 异类短运行线程调度策略:自动.

  7. Prometheus + Grafana (2) mysql、redis、Docker容器、服务端点以及预警

    接着上一节 <Prometheus + Grafana (1) 监控 >,我们继续探讨 Prometheus + Grafana 的复杂应用 实现目标 这节我们的目标是搭建一个多维度监控微 ...

  8. Linux使用docker搭建maven私有仓库

    引言 在实际开发工作中,通常需要搭建maven私有仓库,今天就教大家如何搭建一套maven的私有仓库 Nexus介绍 Nexus 是Maven仓库管理器,如果你使用Maven,你可以从Maven中央仓 ...

  9. Scrapy爬取知名技术文章网站

    scrapy安装以及目录结构介绍 创建有python3的虚拟环境 mkvirtualenv mkvirtualenv py3env 安装scrapy 进入虚拟环境py3env,把pip的源设置为豆瓣源 ...

  10. pytest_fixture通过参数request获取测试数据,并在fixture方法里面使用

    pytest fixture传参request的使用 获取request对pytest插件的版本有要求,如果找不到request报错的话, 建议先升级pytest的版本 要实现的效果 执行测试用例,调 ...