同步操作将从 Ascend/pytorch 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
PyTorch 1.11.0存在CVE-2022-45907漏洞,该漏洞因torch.jit.annotations.parse_type_line方法中不安全使用eval方法,存在可以执行任意代码风险。torch_npu已参考LINK进行修复。
建议用户在系统中配置开启ASLR(级别2 ),又称全随机地址空间布局随机化,可参考以下方式进行配置:
echo 2 > /proc/sys/kernel/randomize_va_space
出于安全性及权限最小化角度考虑,不建议使用root等管理员类型账户使用torch_npu。
建议用户对训练所需文件、训练过程中保存的文件、用户个人的隐私数据、商业资产等敏感文件做好权限控制等安全措施,例如多用户共享数据集场景下的数据集文件写权限控制、profiler等场景产生数据文件权限控制等,设定的权限建议参考文件权限参考进行设置。
torch_npu中profiler工具会生成性能记录文件,生成的文件权限为640,文件夹权限为750,用户可根据需要自行对生成后的相关文件进行权限控制。
用户安装和使用过程需要做好权限控制,建议参考文件权限参考进行设置。如需要保存安装/卸载日志,可在安装/卸载命令后面加上参数--log , 注意对文件及目录做好权限管控。
PyTorch框架运行中所生成的文件权限依赖系统设定,如torch.save接口保存的文件。建议当前执行脚本的用户根据自身需要,对生成文件做好权限控制,设定的权限可参考文件权限参考 。可使用umask控制默认权限,降低提权等安全风险,建议用户将主机(包括宿主机)和容器中的umask设置为0027及其以上,提高安全性。
类型 | Linux权限参考最大值 |
---|---|
用户主目录 | 750(rwxr-x---) |
程序文件(含脚本文件、库文件等) | 550(r-xr-x---) |
程序文件目录 | 550(r-xr-x---) |
配置文件 | 640(rw-r-----) |
配置文件目录 | 750(rwxr-x---) |
日志文件(记录完毕或者已经归档) | 440(r--r-----) |
日志文件(正在记录) | 640(rw-r-----) |
日志文件目录 | 750(rwxr-x---) |
Debug文件 | 640(rw-r-----) |
Debug文件目录 | 750(rwxr-x---) |
临时文件目录 | 750(rwxr-x---) |
维护升级文件目录 | 770(rwxrwx---) |
业务数据文件 | 640(rw-r-----) |
业务数据文件目录 | 750(rwxr-x---) |
密钥组件、私钥、证书、密文文件目录 | 700(rwx------) |
密钥组件、私钥、证书、加密密文 | 600(rw-------) |
加解密接口、加解密脚本 | 500(r-x------) |
torch_npu内集成性能分析工具profiler:
torch_npu支持源码编译安装,在编译时会下载依赖第三方库并执行构建shell脚本,在编译过程中会产生临时程序文件和编译目录。用户可根据需要自行对源代码目录内的文件进行权限管控降低安全风险。
在torch_npu的配置文件和脚本中存在公网地址
AscendPyTorch是PyTorch适配插件,支持用户使用PyTorch在昇腾设备上进行训练和推理。AscendPyTorch适配后支持用户使用PyTorch原生接口。除了原生PyTorch接口外,AscendPyTorch提供了部分自定义接口,包括自定义算子、亲和库和其他接口,支持PyTorch接口和自定义接口连接,具体可参考《PyTorch 模型迁移和训练指南》>API列表。
参考PyTorch社区公开接口规范,AscendPyTorch提供了对外的自定义接口。如果一个函数看起来符合公开接口的标准且在文档中有展示,则该接口是公开接口。否则,使用该功能前可以在社区询问该功能是否确实是公开的或意外暴露的接口,因为这些未暴露接口将来可能会被修改或者删除。
AscendPyTorch项目采用C++和Python联合开发,当前除Libtorch场景外正式接口只提供Python接口,在torch_npu的二进制包中动态库不直接提供服务,暴露的接口为内部使用,不建议用户使用。
PyTorch分布式训练服务需要在设备间进行通信,通信开启的端口默认为全0侦听,为了降低安全风险,建议用户针对此场景进行安全加固,如使用iptables配置防火墙,在运行分布式训练开始前限制外部对分布式训练使用端口的访问,在运行分布式训练结束后清理防火墙规则。
防火墙规则设定和移除参考脚本模板
#!/bin/bash
set -x
# 要限制的端口号
port={端口号}
# 清除旧规则
iptables -D INPUT -p tcp -j {规则名}
iptables -F {规则名}
iptables -X {规则名}
# 创建新的规则链
iptables -t filter -N {规则名}
# 在多机场景下设定白名单,允许其他节点访问主节点的侦听端口
# 在规则链中添加允许特定IP地址范围的规则
iptables -t filter -A {规则名} -i eno1 -p tcp --dport $port -s {允许外部访问的IP} -j ACCEPT
# 屏蔽外部地址访问分布式训练端口
# 在PORT-LIMIT-RULE规则链中添加拒绝其他IP地址的规则
iptables -t filter -A {规则名} -i {要限制的网卡名} -p tcp --dport $port -j DROP
# 将流量传递给规则链
iptables -I INPUT -p tcp -j {规则名}
#!/bin/bash
set -x
# 清除规则
iptables -D INPUT -p tcp -j {规则名}
iptables -F {规则名}
iptables -X {规则名}
防火墙规则设定和移除参考脚本示例
针对特定端口设定防火墙,脚本中端口号为要限制的端口,在PyTorch分布式训练中端口号请参考通信矩阵信息;要限制的网卡名为服务器用于分布式通信使用的网卡,允许的外部访问的IP为分布式训练服务器的IP地址。网卡和服务器IP可以通过ifconfig查看,如下文回显的eth0为网卡名,192.168.1.1为服务器IP地址:
# ifconfig
eth0
inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::230:64ee:ef1a:c1a/64 Scope:Link
假定服务器主节点地址192.168.1.1,另一台需要进行分布式训练的服务器为192.168.1.2,训练端口为29510。
#!/bin/bash
set -x
# 设定侦听的端口
port=29510
# 清除旧规则
iptables -D INPUT -p tcp -j PORT-LIMIT-RULE
iptables -F PORT-LIMIT-RULE
iptables -X PORT-LIMIT-RULE
# 创建新的PORT-LIMIT-RULE规则链
iptables -t filter -N PORT-LIMIT-RULE
# 在多机场景下设定白名单,允许192.168.1.2访问主节点
# 在PORT-LIMIT-RULE规则链中添加允许特定IP地址范围的规则
iptables -t filter -A PORT-LIMIT-RULE -i eno1 -p tcp --dport $port -s 192.168.1.2 -j ACCEPT
# 屏蔽外部地址访问分布式训练端口
# 在PORT-LIMIT-RULE规则链中添加拒绝其他IP地址的规则
iptables -t filter -A PORT-LIMIT-RULE -i eth0 -p tcp --dport $port -j DROP
# 将流量传递给PORT-LIMIT-RULE规则链
iptables -I INPUT -p tcp -j PORT-LIMIT-RULE
#!/bin/bash
set -x
# 清除规则
iptables -D INPUT -p tcp -j PORT-LIMIT-RULE
iptables -F PORT-LIMIT-RULE
iptables -X PORT-LIMIT-RULE
PyTorch提供分布式训练能力,支持在单机和多机场景下进行训练,需要进行网络通信。其中PyTorch需要使用TCP进行通信,torch_npu使用CANN中HCCL在NPU设备间通信,通信端口见通信矩阵信息。用户需要注意并保障节点间通信网络安全,可以使用iptables等方式消减安全风险,可参考通信安全加固进行网络安全加固。
组件 | PyTorch | HCCL |
---|---|---|
源设备 | 运行torch_npu进程的服务器 | 运行torch_npu进程的服务器 |
源IP | 设备地址IP | 设备地址IP |
源端口 | 操作系统自动分配,分配范围由操作系统的自身配置决定 | 默认值为60000,取值范围[0,65520]。用户可以通过HCCL_IF_BASE_PORT环境变量指定Host网卡起始端口号,配置后系统默认占用以该端口起始的16个端口 |
目的设备 | 运行torch_npu进程的服务器 | 运行torch_npu进程的服务器 |
目的IP | 设备地址IP | 设备地址IP |
目的端口 (侦听) | 默认29500/29400,用户可以设定端口号 | 默认值为60000,取值范围[0,65520]。用户可以通过HCCL_IF_BASE_PORT环境变量指定Host网卡起始端口号,配置后系统默认占用以该端口起始的16个端口 |
协议 | TCP | TCP |
端口说明 | 1. 在静态分布式场景中(用torchrun/torch.distributed.launch使用的backend为static), 目的端口(默认29500)用于接收和发送数据,源端口用于接收和发送数据 2. 在动态分布式场景中(用torchrun或者torch.distributed.launch使用的backend为c10d), 目的端口(默认29400)用于接收和发送数据,源端口用于接收和发送数据。可以使用rdzv_endpoint和master_port指定端口号 3. 在分布式场景中,用torchrun或者torch.distributed.launch不指定任何参数时使用的端口号为29500 |
默认值为60000,取值范围[0,65520]。用户可以通过HCCL_IF_BASE_PORT环境变量指定Host网卡起始端口号,配置后系统默认占用以该端口起始的16个端口 |
侦听端口是否可更改 | 是 | 是 |
认证方式 | 无认证方式 | 无认证方式 |
加密方式 | 无 | 无 |
所属平面 | 不涉及 | 不涉及 |
版本 | 所有版本 | 所有版本 |
特殊场景 | 无 | 无 |
备注 | 该通信过程由开源软件PyTorch控制,配置为PyTorch原生设置,可参考PyTorch文档。源端口由操作系统自动分配,分配范围由操作系统的配置决定,例如ubuntu:采用/proc/sys/net/ipv4/ipv4_local_port_range文件指定,可通过cat /proc/sys/net/ipv4/ipv4_local_port_range或sysctl net.ipv4.ip_local_port_range查看 | 该通信过程由CANN中HCCL组件控制,torch_npu不进行控制,端口范围可参考《环境变量参考》的“执行相关 > 集合通信与分布式训练 > 集合通信相关配置>HCCL_IF_BASE_PORT”和《集合通信接口参考》 |
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。