同步操作将从 Ascend/apex 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
Ascend Apex以patch的形式发布,使能用户在华为昇腾(HUAWEI Ascend)AI处理器上,结合原生Apex进行混合精度训练,以提升AI模型的训练效率,同时保持模型的精度和稳定性。
├── Apex
├──patch
├──npu.patch # Ascend Apex对于原生Apex的patch文件,用于原生Apex中混合精度等功能基于昇腾AI处理器的适配
├──scripts # Ascend Apex的构建脚本目录
├──src
├──apex
├──contrib # 提供Tensor融合的Python API,供融合优化器使用
├──optimizers # 融合优化器的实现,部分场景下发挥昇腾的算力
├──csrc/combine_tensors # 提供Tensor融合的C++接口
├──tests # 测试用例
├──LICENSE
请参考https://nvidia.github.io/apex/amp.html。
在amp.initialize()中将参数combine_grad设置为True。
将原有优化器替换为apex.optimizers.xxx, 其中xxx为融合优化器名称。
*推荐使用docker,在容器内编译:参考链接
建议用户以非root用户做环境的安装,避免不必要的安全风险
git clone -b master https://gitee.com/ascend/apex.git
cd apex/
1、请确保torch已安装,setuptools版本小于等于65.7.0(不满足时执行pip install setuptools==41.2.0)
2、执行(支持python3.7-3.10,确保python3.x命令存在)
bash scripts/build.sh --python=3.7
生成的二进制包在apex/dist目录下
进入apex/dist目录,执行以下命令:
cd apex/dist/
pip3 uninstall apex
pip3 install --upgrade apex-0.1+ascend-{version}.whl version代表python版本和cpu架构
Ascend apex通过patch方式源码发布,仅对patch代码安全负责。
运行程序前,建议用户对训练所需文件做好权限控制等安全措施,请勿使用管理员账户安装运行,权限建议设置为 750,文件权限建议设置为 640。
在多用户共享数据集的场景下,请根据需求最小化权限设置所需的文件夹以及文件的读写权限等,避免出现非法访问等安全问题。
对于涉及隐私数据、商业资产等敏感文件,建议用户做好安全防护和权限控制,避免隐私泄露造成安全风险。
对于涉及到使用 C++ 动态编译特性的场景,建议打开 ASLR (地址空间配置随机加载)以及对编译后的 SO 文件开启 strip(移除调试符号信息),减少程序的暴露面。 因编译由 DeepSpeed 原生框架负责且无此类配置选项,故需用户自行开启,开启方法参考下方章节。
echo 2 > /proc/sys/kernel/randomize_va_space
strip -s /PATH/change_data_ptr.{version}.so
原生API及参数说明请参考https://nvidia.github.io/apex/amp.html
, 这里仅对Ascend Apex新增接口、新增参数进行说明。
apex.amp.initialize(models, optimizers=None, enabled=True, opt_level="O1", cast_model_type=None, patch_torch_functions=None, keep_batchnorm_fp32=None, master_weights=None, loss_scale=None, cast_model_outputs=None, num_losses=1, verbosity=1, dynamic_init_scale=2.**16, scale_growth_factor=2., scale_backoff_factor=0.5, scale_window=2000, min_loss_scale=None, max_loss_scale=2.**24, combine_grad=None, combine_ddp=None, ddp_replica_count=4, user_cast_preferred=None, check_combined_tensors=None)
新增参数说明
约束条件:
启用融合功能(combine_grad/combine_ddp)后,在创建融合张量时会申请融合后张量大小的内存,device内存不足时不建议使用。融合张量内存与原张量共享内存,若更改其一的内存地址,将破坏共享内存机制,可以引起精度异常等问题,使用时须用户自行保证共享内存不被破坏。
apex.amp.scale_loss(loss, optimizers, loss_id=0, model=None, delay_unscale=False, delay_overflow_check=False)
API及参数说明请参考https://nvidia.github.io/apex/amp.html
,Ascend Apex中修改了接口内部实现,以保证在NPU上功能正常,在开启融合功能时使用融合张量进行scale/unscale以提升训练效率。
融合优化器约束条件:
启用融合优化器(如apex.optimizers.NpuFusedSGD)后,在创建融合张量时会申请融合后张量大小的内存,device内存不足时不建议使用。融合张量内存与原张量共享内存,若更改其一的内存地址,将破坏共享内存机制,可以引起精度异常等问题,使用时须用户自行保证共享内存不被破坏。
class apex.optimizers.NpuFusedSGD(params, lr=required, momentum=MOMENTUM_MIN, dampening=DAMPENING_DEFAULT, weight_decay=WEIGHT_DECAY_MIN, nesterov=False)
class NpuFusedAdam(params, lr=1e-3, betas=(0.9, 0.999), eps=1e-8, weight_decay=0, amsgrad=False)
class NpuFusedAdamW(params, lr=1e-3, betas=(0.9, 0.999), eps=1e-8, weight_decay=1e-2, amsgrad=False)
class NpuFusedAdamP(params, lr=1e-3, betas=(0.9, 0.999), eps=1e-8, weight_decay=0, delta=0.1, wd_ratio=0.1, nesterov=False)
class NpuFusedBertAdam(params, lr=required, warmup=-1, t_total=-1, schedule='warmup_linear', b1=0.9, b2=0.99, e=1e-6, weight_decay=0.01, max_grad_norm=-1)
class NpuFusedAdadelta(params, lr=1.0, rho=0.9, eps=1e-6, weight_decay=0)
class Lamb(params, lr=1e-3, betas=(0.9, 0.999), eps=1e-6, weight_decay=0, adam=False)
class NpuFusedLamb(params, lr=1e-3, betas=(0.9, 0.999), eps=1e-6, weight_decay=0, adam=False, use_global_grad_norm=False)
class NpuFusedRMSprop(params, lr=1e-2, alpha=0.99, eps=1e-8, weight_decay=0, momentum=0, centered=False)
class NpuFusedRMSpropTF(params, lr=1e-2, alpha=0.9, eps=1e-10, weight_decay=0, momentum=0., centered=False, decoupled_decay=False, lr_in_momentum=True)
model.zero_grad(set_to_none: bool = False)
在torch>2.x版本后,该接口参数set_to_none
默认值变化为True,由于融合功能要求模型梯度内存不能发生变化或释放,在开启融合功能时Ascend Apex通过Monkey Patch的方式将该接口参数set_to_none
强制设置为False。
apex.optimizers.NpuFusedXXX.clip_optimizer_grad_norm_fused(max_norm, norm_type=2)
在使用融合优化器时,该接口等价于torch.nn.utils.clip_grad_norm_(parameters, max_norm, norm_type=2.0)
AscendPyTorch版本 | 支持PyTorch版本 | Pytorch Gitee分支名称 | Apex Gitee分支名称 |
---|---|---|---|
2.0.2 | 1.5.0.post2 | 2.0.2.tr5 | 2.0.2.tr5 |
2.0.3 | 1.5.0.post3 | 2.0.3.tr5 | 2.0.3.tr5 |
2.0.4 | 1.5.0.post4 | 2.0.4.tr5 | 2.0.4.tr5 |
3.0.rc1 | 1.5.0.post5 | v1.5.0-3.0.rc1 | v1.5.0-3.0.rc1 |
3.0.rc1 | 1.8.1.rc1 | v1.8.1-3.0.rc1 | v1.8.1-3.0.rc1 |
3.0.rc2 | 1.5.0.post6 | v1.5.0-3.0.rc2 | v1.5.0-3.0.rc2 |
3.0.rc2 | 1.8.1.rc2 | v1.8.1-3.0.rc2 | v1.8.1-3.0.rc2 |
3.0.rc3 | 1.5.0.post7 | v1.5.0-3.0.rc3 | v1.5.0-3.0.rc3 |
3.0.rc3 | 1.8.1.rc3 | v1.8.1-3.0.rc3 | v1.8.1-3.0.rc3 |
3.0.rc3 | 1.11.0.rc1 (beta) | v1.11.0-3.0.rc3 | v1.11.0-3.0.rc3 |
3.0.0 | 1.5.0.post8 | v1.5.0-3.0.0 | v1.5.0-3.0.0 |
3.0.0 | 1.8.1 | v1.8.1-3.0.0 | v1.8.1-3.0.0 |
3.0.0 | 1.11.0.rc2 (beta) | v1.11.0-3.0.0 | v1.11.0-3.0.0 |
5.0.rc1 | 1.8.1.post1, 1.11.0 | v1.8.1-5.0.rc1, v1.11.0-5.0.rc1 | 5.0.rc1 |
5.0.rc2 | 1.8.1.post2, 1.11.0, 2.0.1.rc1 | v1.8.1-5.0.rc2, v1.11.0-5.0.rc2 | 5.0.rc2 |
5.0.rc3 | 1.11.0, 2.0.1.rc1 | v1.11.1-5.0.rc3, v2.0.1-5.0.rc3 | 5.0.rc3 |
类型 | 文件名 | 公网IP地址/公网URL地址/域名/邮箱地址 | 用途说明 |
---|---|---|---|
开源代码 | scripts/build.sh | https://github.com/NVIDIA/apex.git | 构建脚本中拉取原生Apex源码,结合Ascend Apex patch构建安装包 |
建议用户根据自身需要,参考此清单对各类文件进行加固:
类型 | linux权限参考值 | 备注 |
---|---|---|
文件夹 / 目录 | 750 (rwxr-x---) | 对于共享目录可为755 |
数据集文件 | 640 (rw-r-----) | 对于共享数据集文件可为644 |
checkpoint文件 | 640 (rw-r-----) | |
程序文件 | 440 (r--r-----) | 除非开发调试场景,正常运行时程序文件不应再次修改 |
可执行脚本 | 750 (rwxr-x---) |
本插件不涉及端口侦听等相关行为,相关端口由用户在模型脚本指定调用原生接口开启,建议用户注意做好安全防护,单机训练的情况下请勿绑定全局端口。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。