華為模型王者挑戰(zhàn)賽經(jīng)驗(yàn)總結(jié)

      網(wǎng)友投稿 755 2022-05-30

      一、為什么參加

      歲月寒冬,不知不覺沉迷模型王者挑戰(zhàn)賽已經(jīng)1年了,去年這時候開始了第一屆模型王者挑戰(zhàn)賽,當(dāng)時覺得昇騰芯片有點(diǎn)意思,抱著學(xué)習(xí)的態(tài)度就報了第一屆的模型王者挑戰(zhàn)賽,其實(shí)當(dāng)時也沒想過拿獎之類的,畢竟那都是大佬的事情,我這種菜鳥能參加已經(jīng)是一個很不錯的學(xué)習(xí)機(jī)會了。畢竟自己本身也是特別喜歡通過實(shí)踐去學(xué)習(xí)知識技能,個人感覺那樣的話你可以學(xué)的比純粹看書或者看文檔一步一步干巴巴的學(xué)要有效率很多。這也就是為什么參加,回首過往時間飛逝,初識參與模型王者挑戰(zhàn)賽已經(jīng)1年了。一年間從第一屆玩到第二屆,總體玩的還是蠻開心的。也通過大佬們的代碼學(xué)習(xí)到很多新的知識點(diǎn)

      二、模王賽帶來的收獲

      第一屆模型王者挑戰(zhàn)賽畢竟初生牛犢不怕虎,算子做了很多的模型基本上感覺把能做的tensorflow的模型都做了一遍,有ds-cnn、psnet、easnet、vavue等等,基本上第一屆能做的大多都跑過,也就是因?yàn)榕苓^這么多,所以第一屆的收獲就是掌握了sess、Estimator,這兩個常用API移植方法。

      兩種API通用的操作都是先引入一個庫

      from npu_bridge.npu_init import *

      sess.run遷移主要代碼:

      #創(chuàng)建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 # 必須顯式關(guān)閉 config.graph_options.rewrite_options.memory_optimization = RewriterConfig.OFF # 必須顯式關(guān)閉

      Estimator遷移主要代碼:

      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) ) mnist_classifier=NPUEstimator( model_fn=cnn_model_fn, config=npu_config, model_dir="/tmp/mnist_convnet_model" )

      一般拿到一個模型需要一直先找到這兩塊進(jìn)行一個修改。當(dāng)然有些模型還會有dropout,這個的話也建議改成npu上的dropout,類似代碼如下:

      layers = npu_ops.dropout()

      第一屆模型王者挑戰(zhàn)賽的話收獲,白銀賽段運(yùn)氣不錯DS-CNN模型運(yùn)氣好僥幸拿到了一個第一,到達(dá)黃金賽段后性能和精度都比大佬差了一點(diǎn)點(diǎn)。當(dāng)時嘗試了很多的方法,修改超參,嘗試不同的優(yōu)化器等等,但是都沒有太大變化。于是就嘗試了profiling和autotune這兩種文檔庫里有的方法進(jìn)行一個優(yōu)化,但是還是和大佬的性能和精度差一點(diǎn)點(diǎn)。所以只能拿到了一個二等獎,不過對于當(dāng)初來參加就是抱著學(xué)習(xí)的態(tài)度來的我,感覺已經(jīng)很不錯了。但是輸總要找到問題所在,于是我去看了下合入倉庫的代碼,發(fā)現(xiàn)大佬代碼上也做了一些優(yōu)化。突然發(fā)現(xiàn)又增長了一些知識。

      第二屆模型王者挑戰(zhàn)賽和第一屆驚人的相似,也是靠運(yùn)氣拿到了白銀賽的第一,白銀賽只要達(dá)標(biāo)就可以了。只能說是運(yùn)氣比較好吧。到了黃金賽又遇到了好多大佬,突然發(fā)現(xiàn)難度一定上升很多了,不過既然是來學(xué)習(xí)的也就沒什么壓力了,第二屆模型王者挑戰(zhàn)賽掌握了使用precision_tool工具進(jìn)行精度調(diào)優(yōu)的手段,所以也算是有所收獲。通過這個工具可以分析出有哪些算子精度不太行,然后通過編寫json文件加入到黑名單從而提升他的精度。第二屆選擇的VIDENN模型性能完全沒有問題,和GPU幾乎是一樣,可能還比GPU要快一點(diǎn),所以就沒有做什么性能優(yōu)化。主要還是把心思放在精度優(yōu)化,最優(yōu)的超參也只做到了33.59,離33.66的精度要有還差一點(diǎn),雖然差不多了,但是精度這東西就是要不能有誤差的。所以只能繼續(xù)努力了。無奈快到ddl還是沒有肝出來,后來看到大佬們都做出來了,也就放棄了。

      開始轉(zhuǎn)戰(zhàn)NLRN,NLRN這個模型是使用Estimator,但是修改代碼后發(fā)現(xiàn)他的性能比GPU要差很多。最初的設(shè)想是是不是需要改成sess方式,但是嘗試了下好像難度不小,隨后就死馬當(dāng)活馬醫(yī)提了一個issue,慢慢分析。但是最終等到ddl過了還是沒找到問題優(yōu)化。后來我想了下會不會這個方式也需要做一下mix混合精度。于是差了一下文檔進(jìn)行了修改

      華為模型王者挑戰(zhàn)賽經(jīng)驗(yàn)總結(jié)

      主要代碼如下:

      session_config = tf.ConfigProto() custom_op = session_config.graph_options.rewrite_options.custom_optimizers.add() custom_op.name = "NpuOptimizer" custom_op.parameter_map["use_off_line"].b = True custom_op.parameter_map["precision_mode"].s = tf.compat.as_bytes("allow_mix_precision") custom_op.parameter_map["modify_mixlist"].s = tf.compat.as_bytes('./ops_info.json') session_config.graph_options.rewrite_options.remapping = RewriterConfig.OFF session_config.graph_options.rewrite_options.memory_optimization = RewriterConfig.OFF session_config.gpu_options.allow_growth = hparams.allow_growth if hparams.xla: session_config.graph_options.optimizer_options.global_jit_level = ( tf.OptimizerOptions.ON_1) run_config = NPURunConfig( model_dir=hparams.job_dir, tf_random_seed=hparams.random_seed, save_summary_steps=hparams.save_summary_steps, save_checkpoints_steps=hparams.save_checkpoints_steps, log_step_count_steps=250, precision_mode="allow_mix_precision", session_config=session_config,

      通過這樣修改以后,訓(xùn)練的性能頓時突飛猛進(jìn)。也算是找到了問題所在,也掌握了新的技能。

      同時我又回看了一下VIDENN這個模型,突然想到以前哪個訓(xùn)練營講到過loss_scale,會不會TensorFlow也有類似東西。正巧在啟智社區(qū)搜索dscnn代碼的時候發(fā)現(xiàn)了已經(jīng)提交的冠軍代碼,的確是做了loss_scale manager代碼,于是我嘗試著加上這段代碼

      loss_scale_manager = ExponentialUpdateLossScaleManager(init_loss_scale=2**32, incr_every_n_steps=1000, decr_every_n_nan_or_inf=2, decr_ratio=0.5) loss_scale_optimizer = NPULossScaleOptimizer(opt, loss_scale_manager) update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS) with tf.control_dependencies(update_ops): self.train_op = loss_scale_optimizer.minimize(self.loss)

      然后講epoch設(shè)置到500,等待他訓(xùn)練完成后他的PSNR值,訓(xùn)練的都能打到34.01,后來進(jìn)行了test,最終結(jié)果33.71

      三、模王賽的不足

      通過兩屆模型王者爭霸賽充分體現(xiàn)出了自己對于模型性能優(yōu)化以及精度優(yōu)化還是存在很多不足的。尤其是精度優(yōu)化這一塊,還有很多的知識技能需要去學(xué)習(xí)掌握。后來學(xué)習(xí)昇騰的道路漫漫長。但是不會因?yàn)槟M踬惖氖【筒辉谔剿鲗W(xué)習(xí)這一塊,反而更勵志找到不足努力去補(bǔ)齊知識技能的空缺,期待未來再有類似活動的時候再一次過來挑戰(zhàn)檢驗(yàn)自己學(xué)習(xí)的成果。也期待昇騰未來也能有更多類似的活動,通過比賽活動掌握知識發(fā)現(xiàn)不足從而讓自己學(xué)的更加扎實(shí),是一個永恒的目標(biāo)。第二屆模型王者挑戰(zhàn)賽的落幕是一段昇騰模型移植及優(yōu)化學(xué)習(xí)的結(jié)束,但是同時又是一段新的昇騰模型移植優(yōu)化相關(guān)技術(shù)學(xué)習(xí)的開啟,努力朝著做更好的自己繼續(xù)努力。

      昇騰 機(jī)器學(xué)習(xí)

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:知識圖譜術(shù)語定義搜集與斟酌
      下一篇:華為云發(fā)布四大金融行業(yè)解決方案
      相關(guān)文章
      国产精品久久久亚洲| 亚洲日韩欧洲无码av夜夜摸| 亚洲成A人片777777| 亚洲天堂中文字幕在线| 亚洲精品NV久久久久久久久久| 国产精品无码亚洲精品2021| 亚洲а∨精品天堂在线| 亚洲精品久久无码av片俺去也 | 在线观看亚洲AV日韩AV| 亚洲偷偷自拍高清| 国产精品高清视亚洲精品| 亚洲一区二区影视| 亚洲天堂2016| 亚洲乱码日产精品一二三| 亚洲youwu永久无码精品 | 亚洲va在线va天堂va不卡下载| 亚洲av中文无码乱人伦在线咪咕| 亚洲人成网77777亚洲色 | 国产成人亚洲精品青草天美| 亚洲αv久久久噜噜噜噜噜| 亚洲2022国产成人精品无码区| 亚洲电影一区二区| 久久久无码精品亚洲日韩京东传媒| 亚洲男女性高爱潮网站| 亚洲AV无码成人专区| 亚洲人成人网站18禁| 久久精品国产亚洲av天美18| 亚洲精品99久久久久中文字幕| 国产亚洲大尺度无码无码专线| 亚洲国产无套无码av电影| 亚洲日本中文字幕| 亚洲成年人电影网站| 日韩亚洲产在线观看| 亚洲AV性色在线观看| 亚洲国产综合无码一区二区二三区| 精品国产亚洲一区二区在线观看| 亚洲福利视频一区二区三区| 亚洲一区二区三区精品视频 | 国产成+人+综合+亚洲专| 亚洲av无码成人精品区一本二本| 亚洲男女内射在线播放|