【2023 · CANN训练营第一季】 | 您所在的位置:网站首页 › 神经网络入门要多久 › 【2023 · CANN训练营第一季】 |
一、学习目标
1.了解异构计算架构CANN在神经网络训练中发挥的主要作用。 2.掌握如何基于CANN将TensorFlow模型迁移到昇腾Al处理器上。 3.掌握如何在昇腾Al处理器上进行模型训练,感受昇腾Al的极致性能。 4.掌握如何查看训练日志和训练结果,具备基本的问题定界、定位能力。 二、AI模型开发基础知识入门1. 1.基于CANN的模型开发流程(1)在华为方集中组织培训的场景下,可求助培训或对应课程的接口人。 (2)开发者自学的场景下: a.可在ModelZoo仓上提lssue,该仓的接口人会定期处理问题。 b.可在昇腾社区论坛中查阅经验贴、或者发帖,论坛的接口人会定期处理问题。 三、TensorFlow模型迁移详解 1.为什么要进行模型迁移市面上有很多用于搭建AI模型的深度学习框架,如华为的昇思MindSpore,Google的TensorFlow、Facebook的PyTorch、Caffe等。 除了昇思MindSpore外,TensorFlow等其他深度学习框架下的模型并不能直接在昇腾910 Al处理器上训练,为了使其充分利用昇腾910Al处理器的算力来提升训练性能,我们需要借助异构计算架构CANN的Plugin适配层转换,使转换后的模型能够高效运行在昇腾910Al处理器上。 目前,CANN已经能够支持多种主流AI框架,包括昇思MindSpore、TensorFlow、PyTorch、飞浆、ONNX等,并且开发者只需要非常少的改动,即可快速搞定算法移植,大大减少切换平台的代价。 2.两种模型迁移方式(1)自动迁移: 通过迁移工具对原始脚本进行AST语法树扫描,可自动分析原生的TensorFlow APl在昇腾Al处理器上的支持度,并将原始的TensorFlow训练脚本自动迁移成昇腾Al处理器支持的脚本,对于无法自动迁移的APl,可以参考工具输出的迁移报告,对训练脚本进行相应的适配修改。 (2)手工迁移: 算法工程师需要人工分析TensorFlow训练脚本中的APl支持度情 况,并且参照文档逐一手工修改不支持的APl,以便在昇腾Al处理器上训练,该种方式较为复杂。 3. TensorFlow模型自动迁移详解该特性适用于原生的Tensorflow 1.15训练脚本自动迁移场景。 (1)Estimator迁移: Estimator API属于TensorFlow的高阶API,在2018年发布的TensorFlow 1.10版本中引入,它可极大简化机器学习的编程过程。Estimator有很多优势,例如:对分布式的良好支持、简化了模型的创建工作、有利于模型开发者之间的代码分享等。 a.头文件增加 对于需要修改的python文件,新增以下头文件引用,用于导入NPU相关库。 from npu_bridge.npu_init import * b. 数据预处理 一般情况下,此部分代码无需改造。如果在创建dataset时,使用dataset.batch返回动态shape,需要设置drop_remainder为True,使其固定shape。 dataset = dataset.batch(batch_size, drop_remainder=True) c. 模型构建 一般情况下,此部分代码无需改造。 如果原始网络中使用到了tf.device,需要删除相关代码。 如果在model中使用了dropout接口,推荐使用CANN对应的API实现,以获得更优性能。原始代码: layers = tf.nn.dropout() 迁移后代码: layers = npu_ops.dropout() 如果在model中使用了gelu接口,推荐使用CANN对应的API实现,以获得更优性能。layers = npu_unary_ops.gelu(x) d. 运行配置 TensorFlow通过Runconfig配置运行参数,用户需要将Runconfig迁移为NPURunconfig。NPURunConfig类是继承RunConfig类,因此我们在迁移按照如下示例直接修改接口即可,大多数参数可不变。 原始代码: config=tf.estimator.RunConfig( model_dir=FLAGS.model_dir, save_checkpoints_steps=FLAGS.save_checkpoints_steps, session_config=tf.ConfigProto(allow_soft_placement=True,log_device_placement=False) )迁移后的代码: npu_config=NPURunConfig( model_dir=FLAGS.model_dir, save_checkpoints_steps=FLAGS.save_checkpoints_steps, session_config=tf.ConfigProto(allow_soft_placement=True,log_device_placement=False) )e.创建Estimator 将TensorFlow的Estimator迁移为NPUEstimator,NPU Estimator类继承了Estimator类,因此我们在迁移时按照如下示例直接更改接口即可,参数可保持不变。 原始代码: mnist_classifier=tf.estimator.Estimator( model_fn=cnn_model_fn, config=config, model_dir="/tmp/mnist_convnet_model")迁移后的代码:; mnist_classifier=NPUEstimator( model_fn=cnn_model_fn, config=npu_config, model_dir="/tmp/mnist_convnet_model")f.执行训练 利用指定输入对模型进行固定步数的训练,此部分代码无需改造。 mnist_classifier.train( input_fn=train_input_fn, steps=20000, hooks=[logging_hook]) (2)sess.run迁移:sess.run API属于TensorFlow的低阶API,相对于Estimator来讲,灵活性较高,但模型的实现较为复杂。 头文件增加,数据预处理,模型构建与上一节相同 a.创建session并初始化资源 在创建session前添加如下配置: config = tf.ConfigProto() custom_op=config.graph_options.rewrite_options.custom_optimizers.add() custom_op.name = "NpuOptimizer" config.graph_options.rewrite_options.remapping=RewriterConfig.OFF # 必须显式关闭 config.graph_options.rewrite_options.memory_optimization = RewriterConfig.OFF # 必须显式关闭b.执行训练 此部分代码无需改造。 如果用户训练脚本中没有使用with创建session,比如将session对象作为自己定义的一个类成员,那么需要在迁移后的脚本中显示调用sess.close()。 sess = tf.Session(config=config) sess.run(...) sess.close() 四、TensorFlow模型训练详解 1.训练流程(1)获取AK/SK,授权ModelArts (2)下载数据集,并进行数据预处理(如离线制作成tfrecords);根据指导登陆OBS-browser+,将处理好的数据集上传到OBS (3)安装Pycharm IDE和下载Pycharm toolkit插件 (4)对训练代码进行NPU的迁移&适配 3.创建并提交训练任务(1)Pycharm打开训练工程代码,配置训练参数,下发训练任务 在PyCharm工具栏中,选择“ModelArts > Training Job > New”。 在弹出的对话框中,按照如下示例配置训练参数。 填写完成后,单击“Apply and Run”,自动上传本地代码至云上ModelArts并启动训练;训练过程中,可以在下方控制台查看训练作业日志;训练结束后,会显示训练结果和日志信息保存路径。 (2)查看结果 提交训练作业时,系统将自动在您配置的Training Obs Path中,使用作业名称创建一个新的文件夹,用于存储训练输出的模型、日志和代码。 可以下载result文件夹中的train和teat文件夹,在本地上使用tensorboard查看详细训练过程。 |
CopyRight 2018-2019 实验室设备网 版权所有 |