当前位置: 首页 > news >正文

Server - 高性能的 PyTorch 训练环境配置 (PyTorch3D 和 FairScale)

欢迎关注我的CSDN:https://spike.blog.csdn.net/
本文地址:https://blog.csdn.net/caroline_wendy/article/details/130863537

FairScale

PyTorch3D 是基于 PyTorch 的 3D 数据深度学习库,提供了高效、模块化和可微分的组件,以简化 3D 深度学习的难度。PyTorch3D 包含了常用的 3D 算子和损失函数,以及一个灵活的渲染 API,可以在 PyTorch、C++ 和 CUDA 中并行实现。PyTorch3D 还支持不同大小的 3D 输入的异构批处理,例如网格、点云和体素。PyTorch3D 可以用于多种 3D 深度学习任务,如 3D 形状重建、姿态估计、场景理解和图像合成等。

FairScale 是一个 PyTorch 扩展库,用于在一台或多台机器/节点上进行高性能和大规模训练。这个库扩展了 PyTorch 的基本功能,同时添加了一些新的实验性功能。

FairScale 主要提供了以下几种并行训练算法:

  • ZeRO:一种减少模型状态(优化器状态、梯度、参数)的冗余的算法,可以在数据并行和模型并行之间实现平衡。
  • Optimizer State Sharding (OSS):一种将优化器状态切分并分配给不同的 GPU 的算法,可以大大减少每个 GPU 的内存占用。
  • Sharded Data Parallel (SDP):一种在 OSS 的基础上增加了梯度切分和参数广播的算法,可以进一步提高内存效率。
  • Fully Sharded Data Parallel (FSDP):一种在 SDP 的基础上增加了模型参数切分的算法,可以支持超大规模的模型训练。

FairScale 的使用方法很简单,只需要用 FairScale 提供的类包装 PyTorch 的模型或优化器即可。

1. 环境准备

构建 Docker 的运行环境:

nvidia-docker run -it --name cryoem-[your name] --shm-size 32G -v [nfs]:[nfs] [base image]:[version]

注意:添加 shm-size 参数,即 shared memory,否则 PyTorch 中 num_workers 参数无法使用。

安装 conda 环境:

bash Miniconda3-py38_23.3.1-0-Linux-x86_64.sh

配置 pip 环境源,注意 pip 环境包括多个位置,如下:

# This file has been autogenerated or modified by NVIDIA PyIndex.
# In case you need to modify your PIP configuration, please be aware that
# some configuration files may have a priority order. Here are the following 
# files that may exists in your machine by order of priority:
#
# [Priority 1] Site level configuration files
#       1. `/opt/conda/pip.conf`
#
# [Priority 2] User level configuration files
#       1. `/root/.config/pip/pip.conf`
#       2. `/root/.pip/pip.conf`
#
# [Priority 3] Global level configuration files
#       1. `/etc/pip.conf`
#       2. `/etc/xdg/pip/pip.conf`

优先级最高的是 /opt/conda/pip.conf 环境,配置命令如下:

vim ~/.pip/pip.conf[global]
no-cache-dir = true
index-url = https://pypi.tuna.tsinghua.edu.cn/simple/
extra-index-url = https://pypi.ngc.nvidia.com
trusted-host = pypi.ngc.nvidia.com, pypi.tuna.tsinghua.edu.cn

配置 conda 环境源:

channels:- defaults
show_channel_urls: true
default_channels:- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudmsys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudbioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudmenpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudpytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudsimpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
channel_priority: disabled
allow_conda_downgrades: true

复制 conda 配置:

cp .condarc ~/.conda/.

2. 配置 Conda 环境

配置环境:

conda create -n cryoem python=3.8

安装 pytorch 命令如下:

# 最新版本的 pytorch 环境 2.0.1
conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia

检查 PyTorch 是否可用:

pythonimport torch
print(torch.__version__)
print(torch.cuda.is_available())

安装 pip 包的命令如下:

pip install pytorch3d==0.3.0 mrcfile==1.4.3 pyfftw==0.13.1 fairscale==0.4.13 numba==0.57.0 pandas==2.0.1 siren-pytorch==0.1.6 scipy==1.10.1

注意:FairScale 库不要使用 conda 安装,否则影响 PyTorch 的使用,导致 GPU 失效,建议使用 pip 安装。

核心库如下:

# conda 安装
pytorch=2.0.1# pip 安装
pytorch3d==0.3.0
mrcfile==1.4.3
pyfftw==0.13.1
fairscale==0.4.13
numba==0.57.0
pandas==2.0.1
siren-pytorch==0.1.6
scipy==1.10.1

3. 运行环境

保存 Docker 环境:

# 保存环境
docker ps -a | grep [tag]
docker commit [container-id] cryoem:v1.0
docker save cryoem:v1.0 | gzip > cryoem_v1_0.tar.gz# 加载环境
docker image load -i cryoem_v1_0.tar.gz
nvidia-docker run -it --name cryoem-[your name] --shm-size 32G -v [...]:[...] cryoem:v1.0

运行时,使用不同的GPU,bash命令之前,增加配置CUDA_VISIBLE_DEVICES=0,1,2,3,...,即可。

同时,支持使用 yaml 文件,创建 conda 环境。

conda env update -n cryoem --file cryoem_env.yaml

在 yaml 文件中,具体配置命令如下:

name: cryoem
channels:- pytorch- nvidia- defaults
dependencies:- _libgcc_mutex=0.1=main- _openmp_mutex=5.1=1_gnu- blas=1.0=mkl- brotlipy=0.7.0=py38h27cfd23_1003- bzip2=1.0.8=h7b6447c_0- ca-certificates=2023.01.10=h06a4308_0- certifi=2022.12.7=py38h06a4308_0- cffi=1.15.0=py38h7f8727e_0- charset-normalizer=2.0.4=pyhd3eb1b0_0- cryptography=39.0.1=py38h9ce1e76_0- cuda-cudart=11.8.89=0- cuda-cupti=11.8.87=0- cuda-libraries=11.8.0=0- cuda-nvrtc=11.8.89=0- cuda-nvtx=11.8.86=0- cuda-runtime=11.8.0=0- ffmpeg=4.3=hf484d3e_0- filelock=3.9.0=py38h06a4308_0- freetype=2.12.1=h4a9f257_0- giflib=5.2.1=h5eee18b_3- gmp=6.2.1=h295c915_3- gmpy2=2.1.2=py38heeb90bb_0- gnutls=3.6.15=he1e5248_0- idna=3.4=py38h06a4308_0- intel-openmp=2021.4.0=h06a4308_3561- jinja2=3.1.2=py38h06a4308_0- jpeg=9e=h5eee18b_1- lame=3.100=h7b6447c_0- lcms2=2.12=h3be6417_0- lerc=3.0=h295c915_0- libcublas=11.11.3.6=0- libcufft=10.9.0.58=0- libcufile=1.6.1.9=0- libcurand=10.3.2.106=0- libcusolver=11.4.1.48=0- libcusparse=11.7.5.86=0- libdeflate=1.17=h5eee18b_0- libedit=3.1.20221030=h5eee18b_0- libffi=3.2.1=hf484d3e_1007- libgcc-ng=11.2.0=h1234567_1- libgomp=11.2.0=h1234567_1- libiconv=1.16=h7f8727e_2- libidn2=2.3.2=h7f8727e_0- libnpp=11.8.0.86=0- libnvjpeg=11.9.0.86=0- libpng=1.6.39=h5eee18b_0- libstdcxx-ng=11.2.0=h1234567_1- libtasn1=4.19.0=h5eee18b_0- libtiff=4.5.0=h6a678d5_2- libunistring=0.9.10=h27cfd23_0- libwebp=1.2.4=h11a3e52_1- libwebp-base=1.2.4=h5eee18b_1- lz4-c=1.9.4=h6a678d5_0- markupsafe=2.1.1=py38h7f8727e_0- mkl=2021.4.0=h06a4308_640- mkl-service=2.4.0=py38h7f8727e_0- mkl_fft=1.3.1=py38hd3c417c_0- mkl_random=1.2.2=py38h51133e4_0- mpc=1.1.0=h10f8cd9_1- mpfr=4.0.2=hb69a4c5_1- mpmath=1.2.1=py38h06a4308_0- ncurses=6.4=h6a678d5_0- nettle=3.7.3=hbbd107a_1- networkx=2.8.4=py38h06a4308_1- numpy=1.24.3=py38h14f4228_0- numpy-base=1.24.3=py38h31eccc5_0- openh264=2.1.1=h4ff587b_0- openssl=1.1.1t=h7f8727e_0- pillow=9.4.0=py38h6a678d5_0- pip=23.0.1=py38h06a4308_0- pycparser=2.21=pyhd3eb1b0_0- pyopenssl=23.0.0=py38h06a4308_0- pysocks=1.7.1=py38h06a4308_0- python=3.8.0=h0371630_2- pytorch=2.0.1=py3.8_cuda11.8_cudnn8.7.0_0- pytorch-cuda=11.8=h7e8668a_5- pytorch-mutex=1.0=cuda- readline=7.0=h7b6447c_5- requests=2.29.0=py38h06a4308_0- setuptools=66.0.0=py38h06a4308_0- six=1.16.0=pyhd3eb1b0_1- sqlite=3.33.0=h62c20be_0- sympy=1.11.1=py38h06a4308_0- tk=8.6.12=h1ccaba5_0- torchaudio=2.0.2=py38_cu118- torchtriton=2.0.0=py38- torchvision=0.15.2=py38_cu118- typing_extensions=4.5.0=py38h06a4308_0- urllib3=1.26.15=py38h06a4308_0- wheel=0.38.4=py38h06a4308_0- xz=5.4.2=h5eee18b_0- zlib=1.2.13=h5eee18b_0- zstd=1.5.5=hc292b87_0- pip:- einops==0.6.1- fairscale==0.4.13- fvcore==0.1.5.post20221221- importlib-metadata==6.6.0- iopath==0.1.10- llvmlite==0.40.0- mrcfile==1.4.3- numba==0.57.0- pandas==2.0.1- portalocker==2.7.0- pyfftw==0.13.1- python-dateutil==2.8.2- pytorch3d==0.3.0- pytz==2023.3- pyyaml==6.0- scipy==1.10.1- siren-pytorch==0.1.6- tabulate==0.9.0- termcolor==2.3.0- tqdm==4.65.0- tzdata==2023.3- yacs==0.1.8- zipp==3.15.0

参考

  • Zhihu - Dataloader中的num_workers设置与docker的shared memory相关问题
  • CSDN - 更改Docker的shm(共享内存)大小
  • GitHub - pytorch3d/INSTALL.md
  • GitHub - pyFFTW/pyFFTW
  • GitHub - facebookresearch/fairscale
  • Numba - install numba
  • PyTorch - INSTALLING PREVIOUS VERSIONS OF PYTORCH
  • conda-forge/fairscale-feedstock

相关文章:

Server - 高性能的 PyTorch 训练环境配置 (PyTorch3D 和 FairScale)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/130863537 PyTorch3D 是基于 PyTorch 的 3D 数据深度学习库,提供了高效、模块化和可微分的组件,以简化 3D 深度学…...

小猫踩球-第14届蓝桥杯省赛Scratch中级组真题第2题

[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第137讲。 小猫踩球,本题是2023年5月7日举行的第14届蓝桥杯省赛Scratch图形化编程中级组真题第2题&#xf…...

嵌入式开发从入门到精通之第二十一节:三轴加速度传感器(BMA250E)

目录 1、工作模式 2、中断支持的模式 2.1 新数据的产生 2.2 任何斜率的变化的监测...

代码随想录算法训练营第三十六天|435. 无重叠区间 763.划分字母区间 56. 合并区间

目录 LeeCode 435. 无重叠区间 LeeCode 763.划分字母区间 LeeCode 56. 合并区间 LeeCode 435. 无重叠区间 435. 无重叠区间 - 力扣(LeetCode) 思路1:按照右边界排序,从左向右记录非交叉区间的个数。最后用区间总数减去非交叉…...

shell 脚本

Shell概述 shell是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核 脚本入门 脚本格式 脚本以#!/bin/bash开头(指定解析器) helloworld # 创建脚本 [linuxlocalhost datas]$ cat helloworld.sh #!/bin/bas…...

Linux :: 【基础指令篇 :: 用户管理(补充):(4)】::用户切换

前言:本篇是 Linux 基本操作篇章的内容! 笔者使用的环境是基于腾讯云服务器:CentOS 7.6 64bit。 学习集: C 入门到入土!!!学习合集Linux 从命令到网络再到内核!学习合集 目录索引&am…...

打印机无法扫描的原因及解决方法

在家庭和办公环境中,打印机已成为不可或缺的设备。它不仅可以打印文件,还可以扫描文档并将它们转换为数字数据。但有时,打印机可能无法扫描文档或图片。以下是可能导致这些问题的原因和解决方法。 出现打印机无法扫描的原因: 1.…...

【Mysql】 数据类型

文章目录 【Mysql】 数据类型数据类型分类数值类型1. tinyint类型2. bit类型3. 小数类型 字符串类型1.char2.varchar3. 日期和时间类型4. enum 和 set 【Mysql】 数据类型 mysql中数据类型的作用: 约束操作者的行为更清晰的代码逻辑不同的功用 – 例如&#xff0c…...

mysql中如何使用乐观锁和悲观锁

MySQL中可以使用SELECT ... FOR UPDATE语句来实现悲观锁。这个语句会在查询时锁定被查询的行,在事务结束前都不会释放锁。 例如,我们可以使用以下的 SQL 语句来锁定一个特定的行: BEGIN; SELECT * FROM table WHERE id 1 FOR UPDATE; ... C…...

Logstash技术栈总结

Logstash 是一个可以传输和处理你的日志、事务或其他数据的功能强大的工具,可与各种部署集成。 它提供了大量插件,可帮助你解析,丰富,转换和缓冲来自各种来源的数据。 工作原理 Logstash 事件处理有三个阶段:inputs …...

解决:在单项目组件里面引入 base.scss/ base.less 等的外部文件不成功的问题

1、问题展示: 其一、问题描述: 在单文件组件里面使用封装在 base.scss 或 base.less 里面的样式用法一直不成功; 其二、代码: // 虽然已经标明了用的是 scss 的语法,但是页面调用 .scss 里的 style 样式还是不成功&a…...

论文分享 | WSBERT:Weighted Sampling for Masked Language Modeling

本次分享阿里巴巴达摩院语音实验室、新南威尔士大学与香港科技大学(广州)等在ICASSP2023会议发表的论文《Weighted Sampling for Masked Language Modeling》。该论文主要提出了两种简单有效的加权采样策略,来缓解掩码语言模型(ML…...

java 在线音乐网站系统Myeclipse开发mysql数据库struts2结构java编程计算机网页项目

一、源码特点 java 在线音乐网站系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助struts2开发技术,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mys…...

软件测试基础教程学习1

文章目录 软件测试概述1.1 什么是软件测试1.2 软件测试的目的1.3 对软件测试的理解1.4 软件测试的原则1.5 测试人员的职责1.6 测试人员的素质要求 软件测试概述 1.1 什么是软件测试 1)软件测试要发现软件的错误。 2)软件测试最终要以软件满足用户需求为…...

浅谈一下@Async和SpringSecurityContext可能会遇到的问题和解决方案

Async和SpringSecurityContext 场景回溯 在执行一个用时较长的批量插入业务的时候,我尝试使用Async异步对业务进行优化,但是却给我报了空指针的错误,定位之后发现 此处我是基于SpringSecurity来获取用户的 是currentUserService获取到的当前登陆用户为空导致的,但是当前确实是…...

VUE常见面试题

1.为什么要使用Vue? 答:Vue是一款优秀的前端框架,它可以帮助我们快速构建高效、可复用、易维护的Web应用程序,并提供了丰富的API和生态系统。 2. Vue有哪些生命周期钩子函数? 答:Vue有8个生命周期钩子函…...

字符串匹配算法--KMP算法--BM算法

该算法解决的是字符串匹配问题,即查看字符串中是否含有完整的匹配字符串。如在java的string的contains方法匹配问题最简单的就是暴力破解了。在java的contains也是这么实现的,效率是低一点的。如果想要更快的速度可以自己写KMP算法。 代码实现体验 Knut…...

swagger的简单介绍

目录 swagger是什么? swagger有什么用? Swagger包含的工具集: swagger的使用步骤: swagger的相关注解: Docket的源码 了解swagger的作用和概念了解前后端分离在SpringBoot中集成Swagger swagger是什么?…...

HNU-电路与电子学-小班3

第三次讨论 1 、直接用晶体管而不是逻辑门实现异或门,并解释这个电路是如何工作的。 (6个 MOS 管构成) 2 、通信双方约定采用 7 位海明码进行数据传输。请为发送方设计海明码校验位 生成电路,采用功能块和逻辑门为接收方设计海…...

[机缘参悟-98] :层次不同、维度不同、视角不同、结论不同

目录 全局VS具备, 总体V部分 认知的六个认知层次: 认知的六个立体化维度: 0、维空间,点思维 1、一维空间,直线思维 2、二维空间,平面思维 3、三维空间:立体思维。 4、四维空间&#xff…...

龙虎榜——20250610

上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...

day52 ResNet18 CBAM

在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...

centos 7 部署awstats 网站访问检测

一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

Python如何给视频添加音频和字幕

在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...