hfai¶
幻方萤火深度学习套件 hfai
提供了 训练加速 、 环境管理 与 萤火调度 三类核心接口与命令行工具,以此加速用户本地的训练,打通用户个人主机与萤火二号集群。
hfai.nn¶
将模型中 torch 算子替换成 hfai 优化算子 |
|
将 model 中 hfai 算子替换成 torch 的算子 |
|
给定一个模型或函数和它的输入,对 forward 和 backward 进行计时。 |
|
比较两个模型或函数的性能。 |
|
高效的 LSTM 算子 |
|
高效的 LSTM 算子,并输出完整的 c |
|
高效的 GRU 算子 |
|
更高效的LayerNorm算子 |
|
更高效的MultiheadAttention算子 |
|
压位 Dropout 算子, 训练时的 mask 用 1bit 储存, 以节省训练时的内存 |
|
压位 Hardtanh 算子, 训练时的中间结果用 1bit 储存 [min_val <= x <= max_val], 以节省训练时的内存 |
|
LogSoftmax 算子, 与 torch 相比, 不用在训练中保存 input, 节省一倍内存 |
|
Softmax 算子, 与 torch 相比, 不用在训练中保存 input, 节省一倍内存 |
|
Softmax2d 算子, 与 torch 相比, 不用在训练中保存 input, 节省一倍内存 |
|
Softmin 算子, 与 torch 相比, 不用在训练中保存 input, 节省一倍内存 |
|
Softplus 算子, 与 torch 相比, 不用在训练中保存 output, 节省一倍内存 |
|
压位 ReLU 算子, 训练时的中间结果用 1bit 储存 [x >= 0], 以节省训练时的内存 |
|
压位 ReLU6 算子, 训练时的中间结果用 1bit 储存 [0 <= x <= 6], 以节省训练时的内存 |
|
压位 Threshold 算子, 训练时的中间结果用 1bit 储存 [x > threshold], 以节省训练时的内存 |
|
压位 LeakyReLU 算子, 训练时的中间结果用 1bit 储存 [x >= 0], 以节省训练时的内存 |
|
压位 RReLU 算子, 训练时的中间结果用 1bit 储存 [x >= 0], 以节省训练时的内存 |
|
压位 Hardsigmoid 算子, 训练时的中间结果用 1bit 储存 [-3 <= x <= 3], 以节省训练时的内存 |
|
压位 Hardshrink 算子, 训练时的中间结果用 1bit 储存 [-lambda <= x <= lambda], 以节省训练时的内存 |
|
压位 Softshrink 算子, 训练时的中间结果用 1bit 储存 [-lambda <= x <= lambda], 以节省训练时的内存 |
hfai.nn.functional¶
把所有 hfai 优化过的 torch.nn.functional 和 torch 中的函数转换为 hfai.nn.functional 的对应函数. |
|
dropout 函数, 参考 |
|
hardtanh 函数, 参考 |
|
原地操作的 hardtanh 函数, 参考 |
|
log_softmax 函数, 参考 |
|
softmax 函数, 参考 |
|
softmin 函数, 参考 |
|
softplus 函数, 参考 |
|
allgather 输入的 tensor 并沿着指定的维度拼接在一起,支持 autograd,backward 的时候梯度会传回去 |
|
relu 函数, 参考 |
|
原地操作的 relu 函数, 参考 |
|
relu6 函数, 参考 |
|
threshold 函数, 参考 |
|
原地操作的 threshold 函数, 参考 |
|
leaky_relu 函数, 参考 |
|
原地操作的 leaky_relu 函数 |
|
rrelu 函数, 参考 |
|
原地操作的 rrelu 函数 |
|
hardsigmoid 函数, 参考 |
|
hardshrink 函数, 参考 |
|
softshrink 函数, 参考 |
|
压位 abs 函数, 用法与 func:torch.abs 一致 |
|
原地操作的 abs |
|
压位 minimum 函数, 用法与 func:torch.minimum 一致 |
|
压位 maximum 函数, 用法与 func:torch.maximum 一致 |
|
压位 min 算子, 返回 input 和 min 中的较大值 若 value 是 Tensor, 调用 hf_F.minimum(input, value) 若 value 是 float, 调用 hf_F.clamp(input, max=value) 若 value 是 int, 或者 dim 或 keepdim 不为 None, 调用 torch.min(input, dim=value or dim, keepdim=keepdim) |
|
压位 max 算子, 返回 input 和 max 中的较大值 若 value 是 Tensor, 调用 hf_F.maximum(input, value) 若 value 是 float, 调用 hf_F.clamp(input, min=value) 若 value 是 int, 或者 dim 或 keepdim 不为 None, 调用 torch.max(input, dim=value or dim, keepdim=keepdim) |
|
clip 函数, 参考 |
|
原地操作的 clip 函数 |
|
压位 clamp 算子, 训练时的中间结果用 1bit 储存 [min <= x <= max], 以节省训练时的内存 |
|
原地操作的 clamp 函数 |
|
压位 clamp_max 算子, 训练时的中间结果用 1bit 储存 [x <= max], 以节省训练时的内存 |
|
原地操作的 clamp_max 函数 |
|
压位 clamp_min 算子, 训练时的中间结果用 1bit 储存 [x >= min], 以节省训练时的内存 |
|
原地操作的 clamp_min 函数 |
|
压位 where 函数, 用法与 func:torch.where 一致 |
|
压位 masked_fill 函数, 用法与 func:torch.masked_fill 一致 |
|
原地操作的压位 masked_fill 函数 |
|
节省显存的 masked_select 函数, 用法与 func:torch.masked_select 一致 |
|
节省显存的 masked_scatter 函数, 用法与 func:torch.masked_scatter 一致 |
|
原地操作的节省显存的 masked_scatter 函数 |
|
用给定函数在数据上扫描 (类似 RNN), 并在相邻的阶段间传递隐藏状态 |
|
用满足结合律的二元运算函数在数据上扫描 (类似前缀和), 并行执行 |
hfai.datasets¶
hfai.dataset 基类 |
|
设置数据集存放的主目录 |
|
返回当前数据集主目录 |
|
下载数据集 |
|
这是一个语义分割的公开数据集 |
|
这是一个用于Alphafold训练的蛋白质预测数据集 |
|
这是一个用于识别普适物体的小型数据集 |
|
这是一个用于识别普适物体的大型数据集 |
|
这是用于用于文本分类的 CLUE 数据集。 |
|
这是一个用于掩蔽语言模型预训练的CLUE数据集 |
|
这是一个用于图像说明的 COCO 数据集 |
|
这是一个用于目标检测的 COCO 数据集 |
|
这是一个用于关键点检测的COCO数据集 |
|
这是一个用于全景分割的 COCO 数据集 |
|
这是一个0.25°高分辨率的全球基础气象指标预报数据集 |
|
这是一个用于多模态训练的数据集 |
|
这是一个图像识别数据集 |
|
这是一个图像识别数据集 |
|
这是一个图像识别数据集 |
|
这是一个无监督学习的数据集 |
|
这是一个目标检测数据集 |
|
这是一个用于语音识别的数据集 |
|
这是一个用于长时序预测的时间序列数据集 |
|
这是一个用于自动驾驶任务的 NuScenes 数据集 |
|
这是一个用于图机器学习的基准数据集 |
|
这是一个用于天气预报的基准数据集 |
hfai.distributed¶
功能与 |
|
功能与 |
|
功能与 |
|
基于 zmq 提供的 broadcast,与 torch 提供的 broadcast 相比暂不支持 async_op 与 group 参数 |
|
功能与 |
|
功能与 |
|
设置萤火2号集群NCCL优化等级和自定义配置 |
|
给定一个函数 |
hfai.multiprocessing¶
多进程管理 |
|
功能和 |
|
功能和 |
hfai.checkpoint¶
从给定的 checkpoint 中加载 model, optimizer, scheduler 等对象的状态。 |
|
加载通过 hfai.checkpoint.save 保存的 checkpoint |
|
该函数把 checkpoint 切分成多份,每个 rank 保存一份数据,从而加快保存 checkpoint 的速度。 |
hfai.cuda¶
使用 cuda 内置函数, 把符合 Buffer Protocol 的对象放入锁页内存 |
|
使用 cuda 内置函数, 将已放入锁页内存的对象解除锁页 |
hfai.utils¶
根据 gpu 编号或者 ib 编号得到对应的 numa |
|
返回可用的 GPU 个数 |
|
分析模型的显存占用情况 |
|
绑定当前进程到指定的 NUMA 节点 |
|
返回当前进程所在的 NUMA 编号 |
|
给函数设置超时限制 |
hfai.utils.{mm, detr2}¶
为 mmcv 提供的 FFRecord 文件格式的存储后端 |
|
在 detectron2 上使用 FFRecord,需要在导入 detectron2 包之前使用本函数 |
hfai.autotune¶
按给定超参组合发起训练任务 |
|
进行超参数网格搜索 |
|
在训练代码中获取超参数 |
|
在训练代码中汇报训练结果 |
|
在训练完成后统计训练结果 |
|
将autotune设置为debug模式 |
hfai.pl¶
这是一个可以自动处理 Hfai 打断信号,自动挂起任务的 checkpoint 回调函数管理类, 支持 |
|
这是一个可以自动适配到 Hfai 萤火集群的环境类, 支持 |
|
这是一个可以绑定 numa 的 ddp strategy, 支持 |
|
这是一个可以绑定 numa 的 ddp spawn strategy, 支持 |
|
这是一个可以绑定 numa、使用 hfreduce 的 ddp strategy, 支持 |
|
这是一个可以绑定 numa、使用 hfreduce 的 ddp spawn strategy, 支持 |
|
这是一个将算子转换为 hfai 算子的函数, 支持 1.5.0 <= pytorch_lightning.__version__ <= 1.7.6 |
hfai.file¶
通过 O_DIRECT 直接读取文件 |
|
通过 O_DIRECT 直接读取文件 |
hfai.client¶
设置任务超时时间,规定时间内无 log 该任务会被认为已失败,默认为 1800 秒 |
|
设置 whole_life_state |
|
获取当前 chain_id 的上一个 id 任务留下来的 whole_life_state |
|
获取该任务是否即将被打断 |
|
通知 server 该任务可以被打断 |
|
设置当前任务的优先级,注意如果你没有该优先级的权限可能会导致任务被立刻打断 |
|
根据 v2 配置文件创建任务 |
|
该函数用于将 Process 类绑定异常 hook,在子进程发生异常时通知 server 将其强行关闭,并启动自我检查,发现硬件故障重启该任务 |
|
通过 name、id 或 chain_id 获取训练任务,不能都为空,只能获取自己的任务 |
|
获取自己最近提交的任务 |
|
对当前机器做系统检查,检查通过会退出该任务,检查失败会重启该任务 :param pid: :return: |
|
任务类 |
hfai.client.remote¶
远程运行的Session |
|
配置Session,本地还是远程,远程用哪个分组 |