【CANN训练营第三季】基于Caffe ResNet-50网络实现图片分类在昇腾310服务器的推理过程

本文详细介绍了如何利用CANNToolkit将ResNet-50模型转换为适应华为昇腾AI处理器的离线模型,并完成从代码编译到运行的全过程,包括模型转换、图片预处理和在云服务器上部署的步骤。

云服务器规格(CPU架构:鲲鹏计算)
在这里插入图片描述

CANN Toolkit版本5.1.RC2
在这里插入图片描述

切换用户

su - HwHiAiUser

下载sample仓库

# 进入目录/home/HwHiAiUser
cd ~
# 命令行下载master代码
git clone https://gitee.com/ascend/samples.git   
# 切换到历史tag,以v0.6.0举例
git checkout v0.6.0

准备模型

# 进入样例目录
cd samples/cplusplus/level2_simple_inference/1_classification/resnet50_imagenet_classification

# 创建并进入caffe_model目录
mkdir caffe_model && cd caffe_model

# 下载ResNet-50网络的模型文件(*.prototxt)
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/resnet50/resnet50.prototxt
# 下载ResNet-50网络的权重文件(*.caffemodel)
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/resnet50/resnet50.caffemodel

# 切换到样例目录
cd ..

# 将ResNet-50原始模型转换为适配昇腾AI处理器的离线模型(*.om文件)
atc --model=caffe_model/resnet50.prototxt --weight=caffe_model/resnet50.caffemodel --framework=0 --output=model/resnet50 --soc_version=Ascend310 --input_format=NCHW --input_fp16_nodes=data --output_type=FP32 --out_nodes=prob:0

模型转换成功的截图
在这里插入图片描述

准备测试图片

# 创建并进入data目录
mkdir data && cd data

# 下载测试图片dog1_1024_683.jpg
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/aclsample/dog1_1024_683.jpg
# 下载测试图片dog2_1024_683.jpg
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/aclsample/dog2_1024_683.jpg

# 执行transferPic.py脚本,将*.jpg转换为*.bin,同时将图片从1024*683的分辨率缩放为224*224
python3 ../script/transferPic.py

文件转换成功截图
在这里插入图片描述

编译运行代码

# 配置环境变量
export DDK_PATH=$HOME/Ascend/ascend-toolkit/latest/arm64-linux
export NPU_HOST_LIB=$DDK_PATH/runtime/lib64/stub

# 创建并进入build/intermediates/host目录,用于存放编译文件
mkdir -p build/intermediates/host && cd build/intermediates/host

# 交叉编译
cmake ../../../src -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ -DCMAKE_SKIP_RPATH=TRUE

# 执行如下命令,生成的可执行文件main在“样例目录/out“目录下
make

# 切换到可执行文件main所在的目录
cd $HOME/cplusplus/level2_simple_inference/1_classification/resnet50_imagenet_classification/out

# 运行可执行文件
./main

编译成功截图
在这里插入图片描述

运行应用截图

在这里插入图片描述

### 使用 CANN 工具链优化神经网络模型训练和推理性能的方法与最佳实践 CANN(Compute Architecture for Neural Networks)是华为昇腾 AI 处理器的开发工具链,提供了从底层硬件到高层 API 的完整支持。以下内容详细介绍了如何使用 CANN 工具链加速神经网络模型的训练和推理性能。 #### 高阶 API 的使用 高阶 API 在中阶 API 的基础上进一步封装了复杂的操作逻辑,为用户提供了一站式的训练和推理管理功能[^1]。通过 Model 接口,用户可以指定神经网络模型及其训练设置,从而实现对模型训练过程的全面控制。例如,用户可以通过以下代码示例加载模型并执行推理: ```python from cann.infer import Model, create_tensor # 加载神经网络模型 model = Model("path/to/model.om") # 准备输入数据 input_data = create_tensor(data_shape, data_type) # 执行推理 output = model.execute([input_data]) ``` #### 混合精度训练 混合精度训练是一种通过结合 FP32 和 FP16 数据类型来提升训练速度的技术。CANN 提供了内置的混合精度训练接口,允许用户在保持模型精度的同时显著减少内存占用和计算时间。开发者可以通过以下方式启用混合精度训练: ```python from cann.train import MixedPrecision # 初始化混合精度训练器 mp_trainer = MixedPrecision(model, optimizer, loss_scaler) # 执行训练步骤 loss = mp_trainer.step(inputs, targets) ``` #### 调试与调优 CANN 提供了丰富的调试和调优工具,帮助开发者定位性能瓶颈并优化模型表现。例如,用户可以使用 Profiler 工具分析模型运行时的性能指标,并根据结果调整超参数或优化代码逻辑: ```python from cann.profiler import Profiler # 启用性能分析器 profiler = Profiler(model) # 运行模型并收集性能数据 profiler.start() output = model.execute([input_data]) profiler.stop() # 输出分析报告 report = profiler.get_report() print(report) ``` #### 最佳实践 为了充分发挥 CANN 工具链的优势,开发者应遵循以下最佳实践: - 确保模型被正确转换为 `.om` 格式,这是昇腾处理器支持的标准模型格式。 - 利用 CANN 提供的量化工具对模型进行量化处理,以降低计算复杂度并提高推理速度。 - 选择合适的批处理大小(Batch Size),以平衡 GPU 或 NPU 的利用率与内存消耗。 ```python # 示例:模型量化 from cann.quantization import Quantizer # 初始化量化器 quantizer = Quantizer(model) # 执行量化 quantized_model = quantizer.quantize(calibration_dataset) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值