超算平台使用
由于不同用户在超算上可能需要使用不同的软件环境,配置不同的环境变量,软件之间可能会相互影响,因而在超算上安装了module 工具来对应用软件统一管理。module 工具主要用来帮助用户在使用软件前设置必要的环境变量。用户使用module 加载相应版本的软件后,即可直接调用超算上已安装的软件。
近期需要在超算平台上跑模型,总结了一下基本流程。
一、实验环境
服务提供商:并行科技
训练框架:pytorch
分布式训练框架:DeepSpeed
二、环境搭建
1 安装conda及虚拟环境
由于服务器上的账号没有root权限,需要自己下载anaconda并安装。安装时根据提示一步一步执行即可,在 Anaconda3 will now be installed into this location:
时将路径改为自己的路径。
# 下载anaconda并安装
wget https://repo.anaconda.com/archive/Anaconda3-2018.12-Linux-x86_64.sh
bash Anaconda3-.-Linux-x86_64.sh
# 添加到环境变量中
vi ~/.bashrc
# 加入:
export PATH=/home/YourPath/anaconda3/bin:$PATH
# 退出,然后更新环境变量
source ~/.bashrc
此时执行 conda --version
输出conda版本号说明安装成功。然后给conda配置镜像源:
conda config --set show_channel_urls yes
# 添加官方源
conda config --add channels conda-forge
conda config --add channels r
# 添加国内镜像源
# 北方地区推荐清华源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
# 南方地区推荐使用中科大源:
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
根据GPU型号查看需要的python版本并创建虚拟环境:
conda create -n env_name python=3.10
此时执行 conda info
可以查看conda的镜像和虚拟环境信息
2 安装需要的库
准备需要的第三方python库添加到requirements.txt:
(注意安装mpi4py和transformers时需要先 module load mpich
将mpich加载到环境中)
torch
transformers
deepspeed
datasets
tensorboard
fire==0.4.0
pytz==2021.1
loguru==0.5.3
sh==1.14.2
pytest==6.2.5
tqdm==4.62.3
mpi4py
安装:
# 查看conda虚拟环境
conda env list
# 进入虚拟环境
conda activate env_name
# pip安装
pip install -r requirements.txt
此时 pip list
可以查看已安装的库及版本
3 下载数据集并本地调用
由于服务器无法科学上网,需要先下载数据集放到服务器上,然后本地调用。这次实验用到的数据集在Huggingface上,通过两种方法下载:
方法一:进入主页点击下载按钮一个一个文件下载,其中.arrow是原始数据文件。
方法二:git lfs clone xxx
但是需要先对git进行一些配置:
# 配置socks5
git config --global http.proxy socks5 127.0.0.1:7890
git config --global https.proxy socks5 127.0.0.1:7890
# 配置http
git config --global http.proxy 127.0.0.1:7890
git config --global https.proxy 127.0.0.1:7890
方法三:通过python的datasets库下载
import datasets
dataset = datasets.load_dataset("dataset_name")
dataset.save_to_disk('your_path')
然后本地加载数据集:
import datasets
dataset = load_from_disk("your_path")
此外,tokenizer也需要下载然后换成本地的调用:
# tokenizer = AutoTokenizer.from_pretrained(tokenizer)
tokenizer = AutoTokenizer.from_pretrained("./tokenizer/roberta-base")
4 修改device使用GPU
在代码中修改,使用GPU进行训练
torch.cuda.is_available()
device = torch.device("cuda:0")
if torch.cuda.is_available():
device = torch.device("cuda:0") # you can continue going on here, like cuda:1 cuda:2....etc.
print("Running on the GPU")
else:
device = torch.device("cpu")
print("Running on the CPU")
net = Net().to(device)
batch_X, batch_y = batch_X.to(device), batch_y.to(device)
torch.cuda.device_count():返回当前可见可用的 GPU 数量
torch.cuda.get_device_name():获取 GPU 名称
torch.nn.DataParallel(module, device_ids=None, output_device=None, dim=0)
5 使用MPI进行分布式训练
使用框架进行分布式训练
三、Slurm作业管理系统常用命令
1 sinfo 查看资源使用情况
举例:
sinfo
2 sbatch 提交作业(批处理)
举例:
sbatch -p gpu -N 2 -n 2 --gres=gpu:2 run.sh
3 srun 提交作业(交互式)
举例:
srun -p gpu -N 2 -n 2 --gres=gpu:2 run.sh
squeue 查看作业状态
举例:
squeue
scancel 取消作业任务
scancel JOBID
网站:
北京大学超算提供的集群作业命令教程
常见的资源错误
分配GPU资源
四、module的使用
1 介绍
由于不同用户在超算上可能需要使用不同的软件环境,配置不同的环境变量,软件之间可能会相互影响,因而在超算上安装了module 工具来对应用软件统一管理。module 工具主要用来帮助用户在使用软件前设置必要的环境变量。用户使用module 加载相应版本的软件后,即可直接调用超算上已安装的软件。
2 命令
module avail
查看可用的软件列表
module load [modulesfile]
加载需要使用的软件
module show [modulesfile]
查看对应软件的环境(安装路径、库路径等)
module list
查看当前已加载的所有软件
module unload [modulesfile]
移除使用module加载的软件环境
module purge
清理已加载的module环境
3 超算中常有的软件
例1:
例2:
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)