多人共用GPU服务器租用实例时,最常见的故障往往不是显卡性能不足,而是“代码能看不能改”“训练输出属于root”“数据被误删”。尤其在深度学习项目中,数据集、模型权重和日志交叉存放,一次不当的chmod -R 777就可能留下安全隐患。本文给出一套可复用的Linux协作目录配置方法。

一、问题背景

团队开展大模型训练或推理部署时,通常会让算法、数据和运维人员共享同一台机器。若所有人都使用root,误操作风险很高;若每人使用独立账号,又容易因用户组、默认权限和缓存目录配置不一致而报Permission denied。

合理的做法是按账号、用户组、项目目录和默认权限四层拆分。选择GPU算力平台时,也应确认SSH登录与目录管理方式。润云智算提供GPU云服务器及镜像环境,可在官网了解可用资源。

二、环境准备

本文假设系统为Ubuntu,管理员拥有sudo权限,成员为alice和bob,共享目录为/data/projects/demo。操作前备份重要文件,并确认没有任务正在写入。

建议规划以下结构:

/data/projects/demo/
├── code/       # 团队可读写代码
├── data/       # 原始数据,限制修改
├── outputs/    # 检查点与结果
└── logs/       # 训练和服务日志

这套结构适用于AI算力平台上的科研训练,也适用于临时GPU服务器租用实例。

三、实操步骤

1. 定位权限链路

先检查当前身份,以及从根目录到目标文件的每一级权限:

id
ls -ld /data /data/projects /data/projects/demo
namei -l /data/projects/demo/outputs

namei -l能发现父目录缺少执行权限的问题,比只查看目标文件更可靠。

2. 创建项目用户组

sudo groupadd ai-team
sudo usermod -aG ai-team alice
sudo usermod -aG ai-team bob
getent group ai-team

成员需要重新登录,或执行newgrp ai-team,新用户组才会在当前会话生效。不要遗漏-a参数,否则可能覆盖用户原有附加组。

3. 配置共享目录与组继承

sudo mkdir -p /data/projects/demo/{code,data,outputs,logs}
sudo chown -R root:ai-team /data/projects/demo
sudo chmod 2770 /data/projects/demo
sudo find /data/projects/demo -type d -exec chmod 2770 {} \;
sudo find /data/projects/demo -type f -exec chmod 0660 {} \;

目录权限中的2表示setgid,新建文件会继承ai-team组,避免成员生成的内容只能由本人修改。

4. 设置默认ACL

如果系统支持ACL,可让新文件自动获得组读写权限:

sudo setfacl -R -m g:ai-team:rwx /data/projects/demo
sudo setfacl -R -d -m g:ai-team:rwx /data/projects/demo
getfacl /data/projects/demo

未安装工具时可执行sudo apt install acl,或统一设置umask 0007。ACL适合细粒度授权,但交接时应同时导出权限说明。

5. 保护数据与凭据

原始数据确认无须修改后,可限制为组只读;密钥和令牌则只允许所有者访问:

sudo chmod -R g-w /data/projects/demo/data
chmod 600 ~/.config/project/token
find /data/projects/demo -xdev -type d -perm -0002 -print

最后一条命令用于寻找任何人都可写的目录。生产凭据不要放入代码仓库或公共日志。

6. 用普通用户完成验收

sudo -u alice touch /data/projects/demo/outputs/alice.test
sudo -u bob bash -c 'echo ok >> /data/projects/demo/outputs/alice.test'
ls -l /data/projects/demo/outputs/alice.test

读写测试符合预期后再开始深度学习训练。推理部署的服务账号应仅访问模型和日志目录。

四、常见问题与解决方案

1. 加入用户组后仍然无权限

检查id 用户名,重新登录使组关系生效;同时使用namei -l排查父目录权限。

2. 训练结果仍属于root

通常是使用sudo python启动任务。应切回普通账号运行,并修正历史文件的所有者和用户组。

3. 为什么不建议直接设置777

777允许任意本地用户修改或删除内容,无法形成有效隔离。应优先使用用户组、setgid和ACL。

4. 更换实例后权限显示异常

Linux权限依赖UID和GID。迁移数据时,应同步记录账号映射,并在新环境重新核对所有权。

五、总结

共享GPU实例的关键是让访问范围可检查。通过独立账号、项目用户组、setgid、默认ACL和普通用户验收,可降低误删与中断风险。无论用于大模型训练还是推理部署,都应先固化目录规范,再评估GPU算力平台资源。

FAQ

Q1:一个项目需要单独创建用户组吗?

建议创建。项目组能避免不同任务之间互相读取或修改文件,也便于成员退出时回收权限。

Q2:setgid会让普通文件获得执行权限吗?

不会。它主要作用于目录中的组继承,文件权限仍由创建程序、umask或ACL决定。

Q3:权限配置会影响GPU性能吗?

通常不会,但权限错误会导致数据加载、检查点保存或服务写日志失败,间接中断计算任务。

更多推荐