华为最新开源框架mindspore学习
最近的項目用到了mindspore框架,關于如何手把手在自己電腦上運行一個完整的例子,大家可以去官網中的教程中查看:https://www.mindspore.cn/tutorial/training/zh-CN/master/quick_start/quick_start.html
你也可以直接跳過基礎版,使用進階版,如何利用華為載有Ascend(昇騰910,華為自研的人工智能芯片)的服務器上運行代碼,大家按照這個例子來:https://www.mindspore.cn/tutorial/training/zh-CN/master/advanced_use/use_on_the_cloud.html#ai
這里有幾個問題需要大家注意一下:
1.如何創建OBS桶;
2.如何創建訓練任務;
3.深入認識--data_url和--train_url這兩個參數,這兩個參數需要你在自己的代碼中進行一個重寫,即你加載的數據集以及訓練的輸出是需要在代碼中給出參數的,不必賦值(賦值在創建訓練任務的的時候自動進行),寫出即可:
例:
//-----------------------------------------------------------------------------------------------------//
下面是我在項目過程中遇到的一些問題和相應的解決方法:
1.最開始,我是參照這個鏈接來運行(這是另一種使用服務器的方法,即不用在線創建訓練作業)的,教你如何在Pycharm上使用相關toolkit使用modelarts(即華為的服務器平臺),但是我忽略了一點
,這個例子中使用的深度學習框架是MXNet,我仿照他的方式對我使用mindspore框架的源碼進行修改,最關鍵的部分就是參考它是如何將 數據集路徑 加載進來的,仿照他的方式改好后,產生了第一個令我頭大的問題:
ValueError: The folder s3://modelarts-zjw/Mnist_data/train/ does not exist or permission denied!,即我的路徑是不存在的或者沒有訪問權限,我分別再代碼里添加了
1.os.file.exist(path),來檢驗是否存在,輸出True
2.os.access(path,R_OK),檢驗是否有權限讀取,輸出False
事實證明,問題出現在了這里,這個問題我嘗試解決了很久,但沒有能夠解決,因為是mindspore的源碼報錯,后來官方給的說法是,使用Pycharm這種方法確實不行,原因大概是,服務器在執行時,會在服務器本地創建一個桶的虛擬映射(類似緩存),進而達到訪問桶中數據的目的,通過在網頁上創建訓練任務可以完成這種映射,但是在pycharm上不可以,目前只在使用mindspore框架時遇到了這種問題。所以建議大家不要用pycharm,還是直接在網頁上創建訓練任務比較靠譜。
//------------------------------------------------------------------------------------------------------//
1.自定義 callback 類
我們可以理解為回調函數,正是通過這種回調函數可以實現我們對訓練過程中的參數進行打印,舉個例子:
?
這里值得注意的是:step_num = len(dataset) // batch_size?
還有loss,也可以通過回調來進行打印
loss = LossMoniter()這樣就可以實現每一個step結束后,打印這個step的loss值
def epoch_end(self, run_context):params = run_context.original_args()cost_time = time.time() - self.epoch_begin_timeloss = params.net_outputstrain_steps = params.cur_step_num -self.last_step #獲取epoch結束時一共經過了多少個stepprint("----")print(f'epoch {params.cur_epoch_num} cost time = {cost_time}, train step num: {train_steps}, 'f'one step time: {1000*cost_time/train_steps} ms, 'f'loss: {loss}' )self.last_step = run_context.original_args().cur_step_num2.自定義保存ckpt文件和計算圖
#這里解釋一下這兩個參數, 1.save_checkpoint_steps:每xx個step保存一次ckpt文件 2.keep_checkpoint_max:最多保存多少個ckpt文件,從最后一個算起,最先保存的會被刪掉config_ck = CheckpointConfig(save_checkpoint_steps = 900, keep_checkpoint_max = 10)#1.prefix:ckpt文件的名稱 #2.directory:模型保存的位置,我們又見到了train_url這個參數 #3.config_ck:配置方式ckpoint_cb = ModelCheckpoint(prefix = "checkpoint_lenet", directory=args.train_url, config = config_ck)這里又有一個小問題,就是,我發現即使我的路徑是完全沒得問題的,但是當模型運行結束后,我去查看我桶中特定的路徑,并沒有發現保存的文件。于是我就采用了這樣的方式
import mox mox.file.shift('os', 'mox')#將原有的os文件操作替換為mox,(如果需要)print(f'Start save model') local_checkpoint_path = './cache/model_path' #在服務器上設置一個文件夾,用來暫時保存模型 config_ck = CheckpointConfig(save_checkpoint_steps = 900, keep_checkpoint_max = 10) ckpoint_cb = ModelCheckpoint(prefix = "checkpoint_lenet", directory=local_checkpoint_path, config = config_ck)#注意這里將模型先保存在服務器中的文件夾 mox.file.copy_parallel(src_url=local_checkpoint_path, dst_url=args.train_url)#再將服務器文件 夾里的文件copy到桶里的文件夾注意:
- MoXing是華為云ModelArts團隊自研的分布式訓練加速框架,它構建于開源的深度學習引擎TensorFlow、MXNet、PyTorch、Keras之上。 相對于TensorFlow和MXNet原生API而言,MoXing API讓模型代碼的編寫更加簡單,允許用戶只需要關心數據輸入(input_fn)和模型構建(model_fn)的代碼,即可實現任意模型在多GPU和分布式下的高性能運行,降低了TensorFlow和MXNet的使用門檻。另外,MoXing-TensorFlow還將支持自動超參選擇和自動模型結構搜索,用戶無需關心超參和模型結構,做到模型全自動學習。學習鏈接:https://github.com/huaweicloud/ModelArts-Lab/tree/master/docs/moxing_api_doc
總結
以上是生活随笔為你收集整理的华为最新开源框架mindspore学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 记录 之 一个小bug:Unsuppor
- 下一篇: mindspore学习之使用obsuti