当前位置: 首页 > 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…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则&#xf…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...