TASK_QUEUE_ENABLE
|
-s是否开启TASK多线程下发,绝大多数情况下,打开该功能会进一步提升整网训练性能。取值:
+ | 是否开启TASK多线程下发,绝大多数情况下,打开该功能会进一步提升整网训练性能。取值:
- 0或不配置:关闭TASK多线程下发。
- 1:开启TASK多线程下发。
|
可选
@@ -150,7 +137,9 @@ export TASK_QUEUE_ENABLE=0
## 样例代码
-在进行推理应用时,应尽量保证应用在生命周期内不频繁初始化。推理模式通过模型model.eval\(\)进行设置,并且推理过程要在“with torch.no\_grad\(\):”代码分支下运行。本例中,我们将使用Resnet50网络的python代码进行说明。
+在进行推理应用时,应尽量保证应用在生命周期内不频繁初始化。推理模式通过模型model.eval\(\)进行设置,并且推理过程要在“with torch.no\_grad\(\):”代码分支下运行。
+
+本例中,我们将使用Resnet50网络的python代码进行说明。
样例代码 resnet50\_infer\_for\_pytorch.py:
@@ -246,7 +235,7 @@ def main_worker(npu, args):
print("=> creating model '{}'".format(args.arch))
model = models.__dict__[args.arch](zero_init_residual=True)
- # 将模型数据置于昇腾AI处理器中
+ # 将模型数据复制到昇腾AI处理器中
model = model.to(CALCULATE_DEVICE)
optimizer = torch.optim.SGD([
@@ -256,12 +245,12 @@ def main_worker(npu, args):
args.lr)
# =========================================================================
- # 初始化混合精度模型,使用后可加速运算,但推理结果的准确率可能会轻微降低。可根据实际场景选择使用
+ # 初始化混合精度模型,使用后可加速运算,但结果的准确率可能会轻微降低。可根据实际场景选择使用
# =========================================================================
model, optimizer = amp.initialize(model, optimizer, opt_level="O2", loss_scale=1024, verbosity=1)
# =========================================================================
- # 加载训练好的模型参数:通过命令行参数“--resume checkpoint文件”
+ # 加载训练好的模型参数
# =========================================================================
# 从模型文件中恢复模型参数
if os.path.isfile(args.resume):
@@ -278,7 +267,7 @@ def main_worker(npu, args):
print("=> no checkpoint found at '{}'".format(args.resume))
# =========================================================================
- # 初始化推理数据集
+ # 初始化数据集
# =========================================================================
# 图像数据加载与预处理
valdir = os.path.join(args.data, 'val')
@@ -296,7 +285,7 @@ def main_worker(npu, args):
num_workers=args.workers, pin_memory=True)
# =========================================================================
- # 进入在线推理模式
+ # 运行validate
# =========================================================================
validate(val_loader, model, args)
@@ -332,7 +321,7 @@ def validate(val_loader, model, args):
# 计算输出
output = model(images)
- # 测量结果精度
+ # 统计结果精度
acc1, acc5 = accuracy(output, target, topk=(1, 5))
top1.update(acc1[0], images.size(0))
top5.update(acc5[0], images.size(0))
@@ -344,7 +333,6 @@ def validate(val_loader, model, args):
# 打印推理运算过程日志
progress.display(i)
- # TODO: this should also be done with the ProgressMeter
print(' * Acc@1 {top1.avg:.3f} Acc@5 {top5.avg:.3f}'.format(top1=top1, top5=top5))
return top1.avg
@@ -380,7 +368,7 @@ class AverageMeter(object):
class ProgressMeter(object):
- """记录模型运算过程"""
+ """记录模型运算过程信息"""
def __init__(self, num_batches, meters, prefix=""):
self.batch_fmtstr = self._get_batch_fmtstr(num_batches)
self.meters = meters
@@ -424,7 +412,7 @@ if __name__ == '__main__':
1. 下载预训练模型。
- 打开ModelZoo中[ResNet50详情页](https://ascend.huawei.com/zh/#/software/modelzoo/detail/C/cf20ab8b8bea4032a6b056ab503112e4),点击该页面的“下载模型“下载已训练好的模型文件。
+ 打开ModelZoo中[ResNet50详情页](https://ascend.huawei.com/zh/#/software/modelzoo/detail/C/cf20ab8b8bea4032a6b056ab503112e4),单击该页面的“下载模型“下载已训练好的模型文件。
2. 编辑推理脚本。
@@ -435,8 +423,10 @@ if __name__ == '__main__':
参考[环境变量配置](#环境变量配置.md)设置环境变量,并执行命令:
```
- python3.7 pytorch-resnet50-apex.py --data /data/imagenet --npu 7 --epochs 90 --resume checkpoint_npu7_epoch53.pth.tar
- # 参数'--resume'加载训练好的权重参数文件,用户可根据实际模型名称修改
+ python3 pytorch-resnet50-apex.py --data /data/imagenet \
+ --npu 7 \
+ --epochs 90 \
+ --resume ./checkpoint.pth.tar # ./checkpoint.pth.tar为示例预训练模型文件路径
```
> **说明:**
@@ -447,8 +437,6 @@ if __name__ == '__main__':
- **[混合精度](#混合精度.md)**
-- **[权重更新](#权重更新.md)**
-
混合精度
@@ -456,17 +444,15 @@ if __name__ == '__main__':
基于NPU芯片的架构特性,模型运算会涉及到混合精度,即混合使用float16和float32数据类型的应用场景。使用float16代替float32有如下好处:
-●对于中间变量的内存占用更少,节省内存的使用。
-
-●因内存使用会减少,所以数据传出的时间也会减半。
-
-●float16的计算单元可以提供更快的计算性能。
+- 对于中间变量的内存占用更少,节省内存的使用。
+- 因内存使用会减少,所以数据传出的时间也会减少。
+- float16的计算单元可以提供更快的计算性能。
但是,混合精度训练受限于float16表达的精度范围,单纯将float32转换成float16会影响训练收敛情况,为了保证部分计算使用float16来进行加速的同时能保证训练收敛,这里采用混合精度模块Apex来达到以上效果。混合精度模块Apex是一个集优化性能、精度收敛于一身的综合优化库。
## 特性支持
-混合精度模块功能和优化描述如[表1](#zh-cn_topic_0278765773_table10717173813332)所示:
+混合精度模块功能和优化描述如[表1](#zh-cn_topic_0278765773_table10717173813332)所示。
**表 1** 混合精度模块功能
@@ -479,12 +465,12 @@ if __name__ == '__main__':
|