BiliBili視訊連結:https://www.bilibili.com/video/BV1De411w7tY/?vd_source=4df1b4d14f3f9a52d67c0a0866130ae5
一、MindStudio介紹
1.1 基本介紹
MindStudio為使用者提供在AI開發所需的一站式開發環境,支援模型開發、算子開發以及應用開發三個主流程中的開發任務。通過依靠模型可視化、算力測試、IDE本地仿真調試等功能,MindStudio能夠幫助使用者在一個工具上就能高效便捷地完成AI應用開發。另一方面,MindStudio采用插件化擴充機制,以支援開發者通過開發插件來擴充已有功能。在本案例中所使用的MindStudio版本為5.0.RC1,具體安裝流程可參考MindStudio安裝教程(https://www.hiascend.com/document/detail/zh/mindstudio/50RC3/instg/instg_000002.html)。
具體的,MindStudio的功能包括:
- 針對安裝與部署,MindStudio提供多種部署方式,支援多種主流作業系統,為開發者提供最大便利。
- 針對網絡模型的開發,MindStudio支援TensorFlow、Pytorch、MindSpore架構的模型訓練,支援多種主流架構的模型轉換。內建了訓練可視化、腳本轉換、模型轉換、精度比對等工具,提升了網絡模型移植、分析和優化的效率。
- 針對算子開發,MindStudio提供包含UT測試、ST測試、TIK算子調試等的全套算子開發流程。支援TensorFlow、PyTorch、MindSpore等多種主流架構的TBE和AI CPU自定義算子開發。
- 針對應用開發,MindStudio內建了Profiling性能調優、編譯器、MindX SDK的應用開發、可視化pipeline業務流編排等工具,為開發者提供了圖形化的內建開發環境,通過MindStudio可以進行工程管理、編譯、調試、性能分析等全流程開發,可以很大程度提高開發效率。
MindStudio功能架構如圖1所示,目前含有的工具鍊包括:模型轉換工具、模型訓練工具、自定義算子開發工具、應用開發工具、工程管理工具、編譯工具、流程編排工具、精度比對工具、日志管理工具、性能分析工具、裝置管理工具等多種工具。
圖1
1.2 MindStudio工具中的主要功能特性
- 工程管理:為開發人員提供建立工程、打開工程、關閉工程、删除工程、新增工程檔案目錄和屬性設定等功能。
- SSH管理:為開發人員提供新增SSH連接配接、删除SSH連接配接、修改SSH連接配接、加密SSH密碼和修改SSH密碼儲存方式等功能。
- 應用開發:針對業務流程開發人員,MindStudio工具提供基于AscendCL(Ascend Computing Language)和內建MindX SDK的應用開發程式設計方式,程式設計後的編譯、運作、結果顯示等一站式服務讓流程開發更加智能化,可以讓開發者快速上手。
- 自定義算子開發:提供了基于TBE和AI CPU的算子程式設計開發的內建開發環境,讓不同平台下的算子移植更加便捷,适配昇騰AI處理器的速度更快。
- 離線模型轉換:訓練好的第三方網絡模型可以直接通過離線模型工具導入并轉換成離線模型,并可一鍵式自動生成模型接口,友善開發者基于模型接口進行程式設計,同時也提供了離線模型的可視化功能。
- 日志管理:MindStudio為昇騰AI處理器提供了覆寫全系統的日志收集與日志分析解決方案,提升運作時算法問題的定位效率。提供了統一形式的跨平台日志可視化分析能力及運作時診斷能力,提升日志分析系統的易用性。
- 性能分析:MindStudio以圖形界面呈現方式,實作針對主機和裝置上多節點、多子產品異構體系的高效、易用、可靈活擴充的系統化性能分析,以及針對昇騰AI處理器的性能和功耗的同步分析,滿足算法優化對系統性能分析的需求。
- 裝置管理:MindStudio提供裝置管理工具,實作對連接配接到主機上的裝置的管理功能。
- 精度比對:可以用來比對自有模型算子的運算結果與Caffe、TensorFlow、ONNX标準算子的運算結果,以便用來确認神經網絡運算誤差發生的原因。
- 開發工具包的安裝與管理:為開發者提供基于昇騰AI處理器的相關算法開發套件包Ascend-cann-toolkit,旨在幫助開發者進行快速、高效的人工智能算法開發。開發者可以将開發套件包安裝到MindStudio上,使用MindStudio進行快速開發。Ascend-cann-toolkit包含了基于昇騰AI處理器開發依賴的頭檔案和庫檔案、編譯工具鍊、調優工具等。
1.3 安裝指南
使用MindStudio前,首先應确定其使用場景,包括純開發場景和開發運作場景兩種:
- 純開發場景(分部署形态):在非昇騰AI裝置上安裝MindStudio和Ascend-cann-toolkit開發套件包。可作為開發環境僅能用于代碼開發、編譯等不依賴于昇騰裝置的開發活動(例如ATC模型轉換、算子和推理應用程式的純代碼開發)。如果想運作應用程式或進行模型訓練等,需要通過MindStudio遠端連接配接功能連接配接已部署好運作環境所需軟體包的昇騰AI裝置。
- 開發運作場景(共部署形态):在昇騰AI裝置上安裝MindStudio、Ascend-cann-toolkit開發套件包、npu-firmware安裝包、npu-driver安裝包和AI架構(進行模型訓練時需要安裝)。作為開發環境,開發人員可以進行普通的工程管理、代碼編寫、編譯、模型轉換等功能。同時可作為運作環境,運作應用程式或進行模型訓練。
其中,不管哪種場景,都需要安裝MindStudio、Ascend-cann-toolkit開發套件包:
- MindStudio:提供圖形化開發界面,支援應用開發、調試和模型轉換功能,同時還支援網絡移植、優化和分析等功能。
- Ascend-cann-toolkit:開發套件包。為開發者提供基于昇騰AI處理器的相關算法開發工具包,旨在幫助開發者進行快速、高效的模型、算子和應用的開發。開發套件包隻能安裝在Linux伺服器上,開發者可以在安裝開發套件包後,使用MindStudio開發工具進行快速開發部署。
1.4 安裝方案
1.4.1 安裝方案——Linux
MindStudio和Ascend-cann-toolkit可以使用Linux伺服器上原生桌面自帶的終端gnome-terminal進行安裝,也可以在Windows伺服器上通過SSH登入到Linux伺服器進行安裝。
因為MindStudio是一款GUI程式,是以在Windows伺服器上通過SSH登入到Linux伺服器進行安裝時,需要使用內建了X server的SSH終端(比如MobaXterm,該工具版本需要為v20.2及以上)。
- 純開發場景(分部署形态):該場景下純開發環境需要安裝MindStudio和Ascend-cann-toolkit,如圖2所示。昇騰AI裝置上運作環境的安裝操作請參見《CANN 軟體安裝指南》。
圖2
- 開發運作場景(共部署形态):該場景下需要安裝如圖3所示軟體包,其中驅動、固件、Ascend-cann-toolkit和AI架構包的安裝操作請參見《CANN 軟體安裝指南》。
圖3
1.4.2 安裝方案——Windows
MindStudio可以單獨安裝在Windows上。在安裝MindStudio前需要在Linux伺服器上安裝部署好Ascend-cann-toolkit開發套件包,之後在Windows上安裝MindStudio,安裝完成後通過配置遠端連接配接的方式建立MindStudio所在的Windows伺服器與Ascend-cann-toolkit開發套件包所在的Linux伺服器的連接配接,實作全流程開發功能。
- 純開發場景(分部署形态):該場景下在Windows伺服器上安裝MindStudio,昇騰AI裝置上的驅動、固件、Ascend-cann-toolkit和AI架構包的安裝操作請參見《CANN 軟體安裝指南》。
圖4
- 開發運作場景(共部署形态):該場景下在Windows伺服器上安裝MindStudio,在純開發環境需要安裝Ascend-cann-toolkit,兩者建立連接配接後,形成了內建MindStudio的純開發環境。昇騰AI裝置上運作環境的安裝部署操作請參見《CANN 軟體安裝指南》,此場景運作環境多為端側、邊側裝置如Atlas 500 智能小站和Atlas 200 DK 開發者套件等。
圖5
- Windows工控機場景:該場景下在Windows伺服器上安裝MindStudio、驅動、固件和Windows版nnrt,其中驅動、固件和Windows版nnrt需要參見《CANN Windows版使用者指南》進行安裝。純開發環境需要安裝Ascend-cann-toolkit,與MindStudio連接配接後基于兩者開發的應用程式可在Windows伺服器上運作。
圖6
1.5 安裝流程
1.5.1 安裝流程——Linux
圖7
Linux環境下,MindStudio安裝流程如圖7所示。
- 環境要求:MindStudio安裝的環境要求如表1,可對照着判斷是否滿足條件。
表1 MindStudio環境要求
類别 | 限制要求 | 說明 |
硬體 | 記憶體:最小4GB,推薦8GB 磁盤空間:最小6GB | 若Linux主控端記憶體為4G,在MindStudio中進行模型轉換時,建議Model檔案大小不超過350M,如果超過此規格,作業系統可能會因為超過安全記憶體門檻值而工作不穩定。 若Linux主控端配置更新,比如8G記憶體,則相應支援的操作對象規格按比例提升。 例如,記憶體由4G更新到8G,則Model檔案建議大小不超過700M。 |
系統語言 | en_US.UTF-8 | 目前僅支援系統語言為英文。 請以任意使用者使用locale指令在任意路徑下查詢編碼格式,若系統傳回“LANG=en_US.UTF-8”,則表示正确;否則,請以root使用者使用“vim /etc/default/locale”指令修改“LANG=en_US.UTF-8”,重新開機(使用reboot指令)使之生效。 |
系統要求 | 作業系統可以通過ssh登入,同時打開ssh的X11Forwarding功能 glibc版本應大于或等于2.27 | ssh服務的開啟和X11Forwarding的配置請參見啟動MindStudio時無法顯示圖形化界面。 對于Docker環境,啟動容器時需要映射ssh端口,如 docker run -p {主控端端口}:{容器内ssh端口} ... 若系統glibc版本小于2.27,請參見啟動MindStudio時報glibc版本太低問題處理。 |
已驗證支援的作業系統 | Ubuntu 18.04-x86_64 Ubuntu 18.04-aarch64 Ubuntu 20.04-x86_64 Ubuntu 20.04-aarch64 EulerOS 2.8-aarch64 EulerOS 2.9-aarch64 EulerOS 2.9-x86_64 EulerOS 2.10-aarch64 EulerOS 2.10-x86_64 OpenEuler 20.03-x86_64 OpenEuler 20.03-aarch64 OpenEuler 22.03 LTS-x86_64 OpenEuler 22.03 LTS-aarch64 CentOS 7.6/8.2-x86_64 CentOS 7.6/8.2-aarch64 銀河麒麟OS V10 SP1-aarch64 中标麒麟OS 7.6-aarch64 |
- 準備軟體包:軟體安裝前,請參考表2擷取所需軟體包和對應的數字簽名檔案。其中在軟體數字簽名驗證方面,為了防止軟體包在傳遞過程或存儲期間被惡意篡改,下載下傳軟體包時需下載下傳對應的數字簽名檔案用于完整性驗證。在軟體包下載下傳之後,可以參考《OpenPGP簽名驗證指南》,對從網站下載下傳的軟體包進行PGP數字簽名校驗。如果校驗失敗,則不要直接使用該軟體包,應先聯系華為技術支援工程師解決。使用軟體包安裝/更新之前,也需要按上述過程先驗證軟體包的數字簽名,確定軟體包未被篡改過。
表2 軟體包
軟體包 | 說明 |
MindStudio{version}linux.tar.gz | MindStudio軟體包,含有GUI的內建開發環境。 MindStudio安裝包解壓後包含以下檔案: · bin:MindStudio的執行目錄及依賴的二進制檔案 · build.txt:安裝包建構資訊 · classpath.txt:MindStudio運作時ClassPath加載順序檔案 · icons.db:MindStudio運作時SVG圖示預編譯資料庫緩存檔案 · Install-Linux-tar.txt:MindStudio安裝說明 · jbr:64位系統的依賴庫以及檔案 · lib:Java依賴庫 · license:所用的第三方依賴的許可證 · LICENSE.txt:Apache Licence說明文檔 · NOTICE.txt:注意事項 · plugins:MindStudio所用到的基本插件及Java庫 · product-info.json:MindStudio版本号以及執行文檔路徑 · redist:Java輔助注解 · tools:工具庫 |
Ascend-cann-toolkit{version}linux-{arch}.run | Ascend-cann-toolkit開發套件包,包含開發輔助工具和相關開發接口的開發套件包。 如果環境上已安裝Ascend-cann-toolkit開發套件包,則無需再次擷取。 |
- 準備安裝使用者:
如果已安裝Ascend-cann-toolkit開發套件包,請使用Ascend-cann-toolkit開發套件包的安裝使用者安裝MindStudio。
如果未安裝Ascend-cann-toolkit開發套件包(可參考《CANN 軟體安裝指南》的“安裝開發環境”章節),請執行如下操作:
建立安裝使用者
可使用root或非root使用者進行安裝。
- 若使用root使用者安裝,可直接開始安裝依賴。
- 若使用已存在的非root使用者安裝,須保證該使用者對$HOME目錄具有讀寫以及可執行權限。
- 若使用新的非root使用者安裝,則需要先建立該使用者,請參見如下方法建立(請以root使用者執行以下指令)。
- 建立使用者組和安裝使用者并設定該使用者的$HOME目錄。
- 其中usergroup為使用者組,username為使用者名。
groupadd usergroup
useradd -g usergroup -d /home/username -m username -s /bin/bash
- 以HwHiAiUser組為例,可執行如下指令建立軟體包安裝使用者并加入到HwHiAiUser組中。
groupadd HwHiAiUser
useradd -g HwHiAiUser -d /home/username -m username -s /bin/bash
- 執行以下指令設定非root使用者密碼。
- passwd username
- 安裝依賴:安裝MindStudio和Ascend-cann-toolkit開發套件包前需要安裝相關依賴。具體的依賴清單可參考官方文檔。
- 安裝MindStudio:在完成了軟體包至安裝依賴,以及Ascend-cann-toolkit開發套件包的安裝後,可以進行MindStudio的安裝,其具體的安裝步驟如下:
- 使用MindStudio的安裝使用者上傳軟體包至待安裝環境。
- 解壓MindStudio軟體包:使用MindStudio的安裝使用者在軟體包所在路徑執行如下指令,解壓MindStudio{version}linux.tar.gz軟體包,tar -zxvf MindStudio{version}linux.tar.gz,解壓後包的内容以及說明請參見表3。
表3 參數說明
參數 | 說明 |
Projects頁簽(工程管理) | |
New Project | 建立新工程,建立後工程儲存在“$HOME/AscendProjects”目錄。 |
Open | 打開已有工程。 |
System Profiler | 進入System Profiling界面。 |
Get from Version Control… | 用版本控制工具下載下傳代碼倉并打開。 |
Customize頁簽(定制化個性設定) | |
Color theme | 設定顔色主題。 |
Accessibility | 設定輔助功能,包括設定IDE字型大小和針對紅綠色視覺缺陷調整顔色。 |
Keymap | 設定鍵盤映射,MindStudio會根據您的環境自動建議預定義的鍵盤映射,請確定它與您正在使用的作業系統比對,或者手動選擇與您習慣使用的另一個IDE或編輯器中的快捷方式比對的作業系統。 |
Import Settings… | 從自定義配置目錄導入MindStudio個性化設定。 |
All Settings… | 進入設定界面。 |
Plugins頁簽(插件管理) | |
Marketplace | 插件市場,可搜尋并下載下傳需要的插件。 |
Installed | 檢視已安裝的插件。 |
Learn MindStudio頁簽(MindStudio實用幫助) |
- 使用MindStudio的安裝使用者進入軟體包解壓後的MindStudio/bin目錄并啟動MindStudio。
- 進入導入設定界面,如圖8所示界面。
圖8
- 如果沒有報錯資訊且能正常進入歡迎界面,則表示MindStudio安裝成功。
圖9
1.5.2 安裝流程——Windows
将MindStudio安裝在Windows伺服器上時,Windows伺服器為本地環境,Linux伺服器為遠端環境。MindStudio安裝流程如圖10所示。
圖10
- 環境要求:
- 本地環境要求:Windows 10 x86_64作業系統
- 本地安裝依賴:Python(版本要求:3.7~3.9),MinGW,Cmake,ACLlib(可選,Windows工控機場景開發Windows應用)
- 配置遠端環境:
- 共部署形态遠端昇騰AI裝置:可參考《CANN 軟體安裝指南》部署好昇騰AI裝置。
- 分部署形态遠端純開發環境:可根據遠端Linux伺服器的具體系統版本,參見準備安裝使用者、安裝依賴和配置編譯環境章節配置MindStudio使用環境。請參考《CANN 軟體安裝指南》安裝Ascend-cann-toolkit開發套件包。
- 準備軟體包:軟體安裝前,請參考表4擷取所需軟體包和對應的數字簽名檔案。
表4 軟體包
軟體包 | 說明 |
MindStudio{version}win.zip | MindStudio免安裝壓縮包,含有GUI的內建開發環境。 |
MindStudio{version}win.exe | MindStudio安裝包,含有GUI的內建開發環境。 |
- 安裝依賴:根據官方流程安裝Python依賴,安裝MinGW依賴,安裝ACLlib包,安裝Cmake。
- 安裝MindStudio:在完成上述步驟,即可進行MindStudio的安裝。
- 輕按兩下MindStudio{version}win.exe安裝包,開始安裝MindStudio。
- 進入MindStudio Setup界面,單擊“Next”,如圖11所示。
圖11
- 選擇MindStudio的安裝路徑後,單擊“Next”,如圖12所示。
圖12
- 使用者根據需要勾選安裝選項後,單擊“Next”,如圖13所示。
圖13
- 選擇或建立MindStudio安裝路徑下的啟動菜單檔案夾,單擊“Install”,如圖14所示。
圖14
- 開始安裝MindStudio,完成後單擊“Next”,如圖15所示。
圖15
- 完成MindStudio安裝配置,單擊“Finish”,如圖16所示。
圖16
- 進入MindStudio安裝目錄的bin檔案夾,輕按兩下MindStudio應用程式啟動MindStudio,導入設定界面,如圖17所示界面。
圖17
- 如果沒有報錯資訊且能正常進入歡迎界面,則表示MindStudio安裝成功,如圖18所示。
圖18
二、超參數優化基本介紹
在機器學習、深度學習中,有兩類參數,一類需要從資料中學習和估計得到,稱為模型參數(Parameter);另一類需要人為設定,稱為超參數(Hyperparameter),例如學習率、正則化系數等。
超參數優化,是指用自動化的算法來優化超參數,進而提升模型的精度、性能等名額。使用HPO能力,可以快速高效地在超參數空間中測試選擇最佳的超參數組合,節省大量人力和時間。
目前MindStudio提供的HPO能力支援Random、ASHA、BOHB、BOSS、PBT等HPO算法,适用于常見的深度神經網絡的超參數優化,包括單目标優化和随機帕累托的多目标超參選擇。
三、超參數優化前期準備工作
AutoML(Auto Machine Learning)包括模型自動生成和調優和訓練工程超參數自動調優。昇騰模型開發使用者可以通過模型自動性能調優功能找到性能更好的模型。AI初學者可以通過AutoML工具結合資料集,自動生成滿足需求的模型,對訓練超參進行自動調優。
- 訓練工程超參數優化(Hyperparameter Optimization,簡稱HPO),支援在昇騰910 AI處理器上訓練,覆寫MindSpore,PyTorch,TensorFlow架構,用自動化的算法來優化超參數,進而提升模型的精度、性能等名額。
- 模型自動生成和調優以昇騰910 AI處理器的搜尋訓練,昇騰310 AI處理器和昇騰310P AI處理器的推理驗證為前提,覆寫MindSpore,PyTorch架構,面向分類、檢測分割場景實作模型自動生成和調優。這個場景主要功能是基于資料集自動生成模型和基于預訓練模型進行微調後自動生成模型。
業務流程如圖19所示:
圖 19
3.1 環境準備
- 使用AutoML工具前,可參考《CANN 軟體安裝指南》手冊完成環境搭建,其他環境要求請參見訓練伺服器和推理伺服器。
- 使用非root使用者運作任務時,需要以root使用者将運作使用者加入驅動運作使用者組(例如:HwHiAiUser)中,保證普通使用者對run包的lib庫有讀權限。
- 叢集配置中的訓練和推理伺服器需安裝Vega,訓練伺服器安裝noah_vega,推理伺服器安裝evaluate_service,具體可參考Vega官網自行安裝。
- noah_vega提供安全通信特性,相關配置請參照安全配置說明,使用者在AutoML安裝完成後需要參照該說明正确配置vega之後才能以通信安全的方式運作訓練任務。如果使用1.8.0及以上版本的安全特性noah_vega包,啟動任務時需要在指令末端增加“-s”參數。
- 使用者根據需要自行安裝以下AI架構包:
- MindSpore:
- 請參考MindSpore官網安裝MindSpore架構。
- PyTorch:
- 請參考《CANN軟體安裝指南》的“安裝PyTorch”章節編譯安裝PyTorch1.5.0架構。
- 安裝Torchvision依賴,可參考以下方法進行安裝:
- 在x86_64架構下安裝Torchvision包:
pip3 install --user torchvision==0.6.0
- 在aarch64架構下先從azureology/torchvision下載下傳源碼,執行以下指令安裝0.6.0版本的Torchvision包:
python setup.py install
- 若Pytorch下需要統計模型的參數量資訊,則需要安裝依賴thop:
pip3 install --user thop
- TensorFlow:
- 參考《CANN 軟體安裝指南》安裝tfplugin架構插件包和TensorFlow。
- 請注意CANN版本與MindSpore、PyTorch和TensorFlow的版本配套關系。
3.1.1 訓練伺服器
- 所有訓練伺服器的Python版本需要保持一緻。
- 已安裝sshd。
- 在各個訓練伺服器上的~/.bashrc檔案中配置如下環境變量:
source $HOME/Ascend/ascend-toolkit/set_env.sh #請根據實際情況替換CANN軟體包安裝路徑
source {$HOME/Ascend/tfplugin/set_env.sh #安裝tfplugin時需要配置,請根據實際情況替換CANN軟體包安裝路徑
#以下為單卡訓練時的配置,請根據實際環境和需求配置
export DEVICE_ID=0 #單卡訓練使用的device_id
#以下6項為多卡訓練時的配置,請根據實際環境和需求改動
export RANK_ID=0 #指定調用卡的邏輯ID
export RANK_SIZE=8 #指定調用卡的數量
export RANK_TABLE_FILE=多卡環境組網資訊json檔案所在路徑 #從多卡環境組網資訊json檔案中選擇要使用的device_id
export NPU_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 #執行多卡任務時需要使用的device_id
export DEVICE_ID=0 #執行多卡訓練任務時單卡階段指定使用的device_id
export TF_CPP_MIN_LOG_LEVEL=3 #該項可控制TF架構本身日志級别的列印,0-DEBUG,1-INFO,2-WARNING,3-ERROR
說明
如果訓練伺服器中沒有多卡環境組網資訊json檔案,請參見配置分布式環境變量在訓練伺服器上生成多卡環境組網資訊json檔案。當運作任務的使用者為普通使用者時,需要保證普通使用者對該檔案有可讀權限。
3.1.2 推理伺服器
- 在推理伺服器上的~/.bashrc檔案中配置如下環境變量:
source $HOME/Ascend/ascend-toolkit/set_env.sh #請根據實際情況替換CANN軟體包安裝路徑
export install_path=$HOME/Ascend/ascend-toolkit/latest #請根據實際情況替換CANN軟體包安裝路徑
export DDK_PATH=${install_path} #評估服務編譯時使用
export NPU_HOST_LIB=${install_path}/{arch-os}/devlib #評估服務編譯時使用
- 參見Link配置推理工具,并啟動推理服務。
說明
推理工具中,-t參數為指定推理伺服器的晶片型号,預設值Ascend310。若不使用該參數,預設在昇騰310 AI處理器上啟動推理服務,參數取值如下。
- 昇騰310 AI處理器參數值:Ascend310(預設)
- 昇騰310P AI處理器參數值:Ascend310P*,例如Ascend310P1
其中,*根據晶片性能提升等級、晶片核數使用等級等因素會有不同的取值。請參考《ToolBox使用者指南》的“Ascend-DMI工具使用>裝置實時狀态查詢”章節查詢晶片詳細資訊。
3.1.3 Vega的安全配置
要求:
- Python3.9及以上
- dask和distributed版本為2022.2.0
Vega的安全配置,包括如下步驟:
- 安裝OpenSSL
- 首先要安裝OpenSSL 1.1.1,從源碼編譯安裝,或者直接安裝編譯後的發行包。
- 然後安裝OpenSSL的python接口,如下:
pip3 install --user pyOpenSSL==19.0.0
- 生成CA根證書
- 執行如下指令生成CA憑證:
openssl genrsa -out ca.key 4096
openssl req -new -x509 -key ca.key -out ca.crt -subj "/C=<country>/ST=<province>/L=<city>/O=<organization>/OU=<group>/CN=<cn>"
- 注意:
- 以上<country>、<province>、<city>、<organization>、<group>、<cn>根據實際情況填寫,去掉符号<>,本文後面的配置也是同樣的。并且CA的配置需要和其他的不同。
- RSA密鑰長度建議在3072位及以上,如本例中使用4096長度。
- 預設證書有效期為30天,可使用-days參數調整有效期,如-days 365,設定有效期為365天。
- 生成評估服務用的證書
評估服務支援加密證書和普通證書:
若使用加密證書,需要安裝華為公司的KMC安全元件,參考生成加密證書章節
若使用普通證書,參考生成普通證書章節
- 生成加密證書
執行以下指令,獲得證書配置檔案:
- 查詢openssl配置檔案所在的路徑:
openssl version -d
在輸出資訊中,找到類似于OPENSSLDIR: "/etc/pki/tls",其中"/etc/pki/tls"即為配置檔案所在目錄。
2.拷貝配置檔案到目前目錄:
cp /etc/pki/tls/openssl.cnf .
3.在配置檔案中openssl.cnf中,增加如下配置項:
req_extensions = v3_req # The extensions to add to a certificate request
執行如下腳本,生成評估伺服器所使用的證書的加密私鑰,執行該指令時,會提示輸入加密密碼,密碼的強度要求如下:
- 密碼長度大于等于8位
- 必須包含至少1位大寫字母
- 必須包含至少1位小寫字母
- 必須包含至少1位數字
- 必須包含至少1位特殊字元
openssl genrsa -aes-256-ofb -out server.key 4096
然後再執行如下指令,生成證書,并删除臨時檔案:
openssl req -new -key server.key -out server.csr -subj "/C=<country>/ST=<province>/L=<city>/O=<organization>/OU=<group>/CN=<cn>" -config ./openssl.cnf -extensions v3_req
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -extfile ./openssl.cnf -extensions v3_req
rm server.csr
執行如下腳本生成評估服務用戶端所使用的證書的加密私鑰,執行該指令時,會提示輸入加密密碼,密碼的強度要求如伺服器端私鑰,且和伺服器端私鑰密碼不同,請記錄好該密碼,後繼還需使用:
openssl genrsa -aes-256-ofb -out client.key 4096
然後再執行如下指令,生成證書,并删除臨時檔案:
openssl req -new -key client.key -out client.csr -subj "/C=<country>/ST=<province>/L=<city>/O=<organization>/OU=<group>/CN=<cn>" -config ./openssl.cnf -extensions v3_req
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -extfile ./openssl.cnf -extensions v3_req
rm client.csr
2.生成普通證書
執行如下腳本,生成評估伺服器端和用戶端使用的證書的私鑰和證書:
openssl genrsa -out server.key 4096
openssl req -new -key server.key -out server.csr -subj "/C=<country>/ST=<province>/L=<city>/O=<organization>/OU=<group>/CN=<cn>" -config ./openssl.cnf -extensions v3_req
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -extfile ./openssl.cnf -extensions v3_req
rm server.csr
openssl genrsa -out client.key 4096
openssl req -new -key client.key -out client.csr -extensions v3_ca -subj "/C=<country>/ST=<province>/L=<city>/O=<organization>/OU=<group>/CN=<cn>" -config ./openssl.cnf -extensions v3_req
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -extfile ./openssl.cnf -extensions v3_req
rm client.csr
4.生成Dask用的證書
執行如下腳本,生成Dask伺服器端和用戶端使用的證書的私鑰和證書:
openssl genrsa -out server_dask.key 4096
openssl req -new -key server_dask.key -out server_dask.csr -subj "/C=<country>/ST=<province>/L=<city>/O=<organization>/OU=<group>/CN=<cn>" -config ./openssl.cnf -extensions v3_req
openssl x509 -req -in server_dask.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server_dask.crt -extfile ./openssl.cnf -extensions v3_req
rm server_dask.csr
openssl genrsa -out client_dask.key 4096
openssl req -new -key client_dask.key -out client_dask.csr -subj "/C=<country>/ST=<province>/L=<city>/O=<organization>/OU=<group>/CN=<cn>" -config ./openssl.cnf -extensions v3_req
openssl x509 -req -in client_dask.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client_dask.crt -extfile ./openssl.cnf -extensions v3_req
rm client_dask.csr
删除CA私鑰:
rm ca.key
5.加密私鑰密碼
若加密伺服器使用加密證書,則需要執行本章節餘下步驟,若使用普通證書,則跳過該章節。
加密生成評估服務的伺服器端和用戶端的私鑰密碼,需要安裝華為公司KMC安全元件,并将該安全元件動态連結庫所在的目錄添加到LD_LIBRARY_PATH中。
export LD_LIBRARY_PATH=<Directory where the KMC dynamic link library is located>:$LD_LIBRARY_PATH
接下來安裝Vega,使用Vega的密碼加密工具調用KMC安全元件對密碼加密。 在執行如下指令時,請輸入在生成私鑰時輸入的密碼,該指令會生成加密後的密碼,請注意儲存,在配置檔案中會使用到這兩個加密後的密碼:
vega-encrypt_key --cert=server.crt --key=server.key --key_component_1=ksmaster_server.dat --key_component_2=ksstandby_server.dat
vega-encrypt_key --cert=client.crt --key=client.key --key_component_1=ksmaster_client.dat --key_component_2=ksstandby_client.dat
6.配置安全相關的配置檔案
請在目前使用者的主目錄下建立.vega目錄,并将如上生成的秘鑰、證書、加密材料等,拷貝到該目錄下,并改變權限:
mkdir ~/.vega
mv * ~/.vega/
chmod 600 ~/.vega/*
說明:
- 如上的秘鑰、證書、加密材料也可以放到其他目錄位置,注意通路權限要設定為600,并在後繼的配置檔案中同步修改該檔案的位置,需要使用絕對路徑。
- 在訓練叢集上,需要保留ca.crt、client.key、client.crt、ksmaster_client.dat、ksstandby_client.dat、server_dask.key、server_dask.crt、client_dask.key、client_dask.crt,并删除其他檔案。
- 評估服務上,需要保留ca.crt、server.key、server.crt、ksmaster_server.dat、ksstandby_server.dat,并删除其他檔案。
- 以下為預設配置的加密套件:
ECDHE-ECDSA-AES128-CCM:ECDHE-ECDSA-AES256-CCM:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-DSS-AES128-GCM-SHA256:DHE-DSS-AES256-GCM-SHA384:DHE-RSA-AES128-CCM:DHE-RSA-AES256-CCM
如需縮小範圍,可在client.ini與vega.ini中加入配置:
ciphers=ECDHE-ECDSA-AES128-CCM:ECDHE-ECDSA-AES256-CCM
在~/.vega目錄下建立server.ini和client.ini。
在訓練叢集中,需要配置~/.vega/server.ini和~/.vega/client.ini:
server.ini:
[security] # 以下檔案路徑需要修改為絕對路徑
ca_cert=<~/.vega/ca.crt>server_cert_dask=<~/.vega/server_dask.crt>
server_secret_key_dask=<~/.vega/server_dask.key>
client_cert_dask=<~/.vega/client_dask.crt>
client_secret_key_dask=<~/.vega/client_dask.key>
client.ini:
[security] # 以下檔案路徑需要修改為絕對路徑
ca_cert=<~/.vega/ca.crt>
client_cert=<~/.vega/client.crt>
client_secret_key=<~/.vega/client.key>
encrypted_password=<加密後的client端的密碼> # 如果使用普通證書, 此項配置為空
key_component_1=<~/.vega/ksmaster_client.dat> # 如果使用普通證書, 此項配置為空
key_component_2=<~/.vega/ksstandby_client.dat> # 如果使用普通證書, 此項配置為空
在評估伺服器上,需要配置~/.vega/vega.ini:
[security] # 以下檔案路徑需要修改為絕對路徑
ca_cert=<~/.vega/ca.crt>
server_cert=<~/.vega/server.crt>
server_secret_key=<~/.vega/server.key>
encrypted_password=<加密後的server端的密碼> # 如果使用普通證書, 此項配置為空
key_component_1=<~/.vega/ksmaster_server.dat> # 如果使用普通證書, 此項配置為空
key_component_2=<~/.vega/ksstandby_server.dat> # 如果使用普通證書, 此項配置為空
7.配置評估服務守護服務
使用systemctl管理評估伺服器程序,當程序出現異常時自動重新開機,保證評估伺服器連續性。
首先建立一個啟動評估服務的腳本run_evaluate_service.sh,内容如下,注意替換<ip>、<path>為真實IP和目錄:
vega-evaluate_service-service -i <ip> -w <path>
然後再建立一個守護服務的檔案evaluate-service.service,腳本内容如下,注意替換為真實的腳本位置:
[Unit]
Description=Vega Evaluate Service Daemon
[Service]
Type=forking
ExecStart=/<your_run_script_path>/run.sh
Restart=always
RestartSec=60
[Install]
WantedBy=multi-user.target
然後将evaluate-service.service拷貝到目錄/usr/lib/systemd/system中,并啟動該服務:
sudo cp evaluate-service.service /usr/lib/systemd/system/
sudo systemctl daemon-reload
sudo systemctl start evaluate-service
8.配置HCCL白名單
請參考Ascend提供的配置指導。
9.注意事項
- 模型風險
對于AI架構來說,模型就是程式,模型可能會讀寫檔案、發送網絡資料。例如Tensorflow提供了本地操作API tf.read_file, tf.write_file,傳回值是一個operation,可以被Tensorflow直接執行。 是以對于未知來源的模型,請謹慎使用,使用前應該排查該模型是否存在惡意操作,消除安全隐患。
- 運作腳本風險
Vega提供的script_runner功能可以調用外部腳本進行超參優化,請确認腳本來源,確定不存在惡意操作,謹慎運作未知來源腳本。
- KMC元件不支援多個使用者同時使用
若使用KMC元件對私鑰密碼加密,需要注意KMC元件不支援不同的使用者同時使用KMC元件。若需要切換使用者,需要在root使用者下,使用如下指令查詢目前信号量:
ipcs
然後删除查詢到的目前所有的信号量:
ipcrm -S '<信号量>'
- 删除開源軟體中不适用的私鑰檔案
Vega安裝時,會自動安裝Vega所依賴的開源軟體,請參考清單。
部分開源軟體的安裝包中可能會帶有測試用的私鑰檔案,Vega不會使用這些私鑰檔案,删除這些私鑰檔案不會影響Vega的正常運作。
可執行如下指令所有的私鑰檔案:
find ~/.local/ -name *.pem
在以上指令列出的所有檔案中,找到Vega所依賴的開源軟體的私鑰檔案。一般私鑰檔案的名稱中會帶有單詞key,打開這些檔案,可以看到以-----BEGIN PRIVATE KEY-----開頭,以-----END PRIVATE KEY-----結尾,這些檔案都可以删除。
- Horovod和TensorFlow
在安全模式下,Vega不支援Horovod資料并行,也不支援TensorFlow架構,Vega在運作前檢查若是Horovod資料并行程式,或者TensorFlow架構,會自動退出。
- 限定Distributed僅使用tls1.3協定進行通信
若需要限定開源軟體Distributed的元件間的通信僅使用tls1.3協定,需要配置~/.config/dask/distributed.yaml
distributed.yaml:
distributed:
comm:
tls:
min-version: 1.3
請參考Dask的配置指導。
3.2 叢集管理
建立新叢集
- 在菜單欄選擇“Ascend > AutoML > Cluster Manager”。進入“Cluster Manager”界面。
- 單擊“+New Cluster”。進入“Add Cluster”界面,如圖20所示。界面參數說明如表5所示。
圖 20
表5
參數 | 說明 |
Cluster Name | 叢集名稱,在所有叢集裡具有唯一性。隻支援英文字母、數字或者下劃線,以英文字母開頭,且長度不超過32個字元。例如:Cluster_01。 |
Evaluation Service | 評估服務,通過下拉框選擇已認證SSH配置好的遠端環境。 |
Evaluation Service Port | 評估伺服器端口,僅支援輸入1~65535之間的數字,預設值為8888。 |
Training Service | 訓練伺服器,通過下拉框選擇已認證SSH配置好的遠端訓練環境。 |
Primary | 訓練服務叢集主節點,通過下拉框選擇已認證SSH配置好的遠端訓練環境。 |
Add | 添加訓練服務。單擊選擇此項後,“Secondary”、“Data Sharing Service”和“NFS Server Path”參數才會在界面展現。 |
Secondary | 訓練服務叢集從節點,通過下拉框選擇已認證SSH配置好的遠端訓練環境。單擊删除圖示可以删除從節點。 |
Data Sharing Service | 資料共享伺服器,通過下拉框選擇已認證SSH配置好的遠端環境。 |
NFS Server Path | NFS伺服器路徑。例如:/home/test/nfs_cache。 |
Workspace | 所有訓練伺服器的工作路徑。例如:/home/test/nfs_folder。 |
- 單擊“OK”,完成新叢集建立。
删除叢集
- 在菜單欄選擇“Ascend > AutoML > Cluster Manager”。進入“Cluster Manager”界面。
- 單擊需要删除的叢集後方的,如圖21所示。
圖 21
四、模型開發使用HPO界面工具調優流程
4.1 前提條件
已安裝1.1.3版本的pandas依賴包,執行以下指令以安裝:
pip install pandas==1.1.3 --user
4.2 修改模型訓練腳本
修改使用者模型訓練腳本,添加dump_objective函數,并在此腳本中調用此函數,儲存待優化名額。代碼段截圖如圖22所示。
圖22
使用者可參考{CANN包安裝路徑}/ascend-toolkit/latest/tools/ascend_automl/algorithms /script_hpo/hpo_ui_sample.py進行操作,此樣例使用以下語句儲存平均耗時和精度名額。如圖23所示。
圖23
其中dump_objective函數的入參objective_key要與步驟4.3中General Config頁簽中填寫的Objectives優化目标一緻,objective_value為使用者腳本中優化目标值。
HPO功能在使用者指定的搜尋空間内,進行超參數采樣,并對每一組超參數調起一個使用者模型的訓練任務。通過以上修改,使用者腳本可在模型訓練任務完成後,将超參數對應的精度、性能等資訊傳遞給HPO主程序,以便後續選出最優超參。
4.3 配置 General Config
在菜單欄選擇“Ascend > AutoML > HPO”,進入General Config頁簽,如圖24所示。詳細參數說明如表5所示。
圖24
表 5 參數說明
參數 | 說明 |
Compute Nodes Cluster | 計算叢集選擇。 |
Parallel Search | 多卡或者單卡配置按鈕,按鈕開狀态為多卡,關閉為單卡。 |
Total Epochs | 搜尋epoch配額。在HPO過程中,每個訓練任務會消耗一定數量的epochs,所有訓練任務的epoch總和小于此Total Epochs項。使用者可參考Total Epochs*time_per_epoch / num_of_device來估算時間。 |
Task Work Path | 目前運作使用者目錄下的工作路徑,HPO過程的輸出路徑。需使用者標明或者輸入存在且有讀權限路徑,且檔案路徑中不包含非法字元。 |
Search Alogorithom Type | 搜尋算法,目前僅支援AshaHpo算法。 |
Objectives | 優化目标,單擊右側“+”圖示可添加需要優化的目标。在文本框中輸入優化目标,例如平均精度、訓練疊代耗時等。 l Max:表示期望優化目标最大化。 l Min:表示期望優化目标最小化。 單擊右側删除圖示可以删除對應的優化目标參數項。 |
4.4 配置 Train Config
單擊“Next”,進入Train Config頁簽,如圖25所示。詳細參數說明如表6所示。
圖25
表 6 參數說明
參數 | 說明 |
Train Script | 4.2中的使用者的模型訓練腳本,需為存在的可讀Python腳本,不包含非法字元。在HPO調優過程中會調用該腳本。 |
Env Variables | 環境變量。單擊右側按鈕添加環境變量。 l 當General Config頁簽開啟Parallel Search參數時,需配置以下環境變量: NPU_VISIBLE_DEVICES:可用的device。 RANK_SIZE:device清單長度。 RANK_TABLE_FILE:組網資訊檔案(若在環境準備已配置該環境變量,則不用在此處進行配置)。使用者需要先配置組網資訊檔案,具體可參考https://www.mindspore.cn/tutorial/training/zh-CN/r1.2/advanced_use/distributed_training_ascend.html。 BATCH_TASK_INDEX:任務編号,一般配置為0。 l 當General Config頁簽關閉Parallel Search參數時,需配置DEVICE_ID實作在指定卡上運作。 |
Search Space | 搜尋空間,單擊右側的“+”按鈕可以添加以下搜尋内容。 l Key:搜尋關鍵字,需要優化的使用者腳本輸入參數名,這裡需要優化的是“lr”和“momentum”參數,是以填“--lr”和“--momentum”,必填項。 l Type:搜尋類型。支援CATEGORY、BOOL、INT、INT_EXP、FLOAT、FLOAT_EXP,必填項。 l Range:目前Key的搜尋範圍。需手動輸入,内容用英文逗号分隔,必填項。 單擊删除圖示可以删除對應的搜尋空間。 說明: 搜尋類型可選以下六種: l CATEGORY 分組類型,使用者在Range中給出可選的取值,可以為任意的資料類型,如:[18, 34, 50, 101],[0.3, 0.7, 0.9],['Adam', 'SGD'],[[1, 0, 1],[0, 0, 1]]。 l BOOL 布爾類型,對應Range取值為[True, False]。 l INT 整數類型,對應Range設定最小值和最大值,均勻采樣,如:[10, 100]。 l INT_EXP 整數類型,對應Range設定最小值和最大值,指數采樣,如:[1, 100000]。 l FLOAT 浮點數類型,對應Range設定最小值和最大值,均勻采樣,如:[0.1, 0.9]。 l FLOAT_EXP 浮點數類型,對應Range設定最小值和最大值,指數采樣,如:[0.1, 100000.0]。 |
Other Options | 其他參數項,單擊右側的“+”按鈕可以添加不需要優化的參數。 l Key:不需要優化的使用者腳本入參名,可選項。示例中不需要優化的有“--weight_decay”參數,是以填入“--weight_decay” l Value:使用者指定的入參值,選填項。 單擊删除圖示可以删除對應的其他參數項。 |
Epoch Name | 在HPO的不同階段,對網絡訓練不同的epoch,這一epoch值由HPO程序給出,不需使用者指定。是以,使用者需将腳本入參中,代表epoch的參數名稱,填入此欄,以便HPO過程中将HPO算法給出的epoch值傳入使用者腳本。 例如:4.2中示例,此項應填“--epochs ” 說明: 如果待優化的訓練腳本不能傳入epoch參數,需要使用者将訓練腳本修改為能傳入epoch參數的形式。 |
Device Name | 在HPO過程中,啟動多個訓練任務,使用不同的超參數進行網絡訓練。不同的訓練任務使用不同的AI晶片,AI晶片ID由HPO程序給出,不需使用者指定。是以,使用者需将腳本入參中,代表AI晶片ID的參數名稱,填入此欄,以便HPO過程中将這一參數自動傳入使用者腳本。 例如:1中示例,此項應填“--device” 說明: l 如果待優化的訓練腳本不能傳入該device參數,需要使用者将訓練腳本修改為能傳入device參數的形式。 l 傳入的device值的格式為“npu:x”,其中x可能為0,1,2,3,4,5,6,7。 |
4.5 預覽配置結果
單擊“Next”,進入Preview頁簽,如圖26、27所示。
圖26
圖27
基于前面的兩個配置界面,可以生成配置檔案config.yml,接口檔案train.py,啟動檔案run.sh,并發送到遠端伺服器,調起HPO任務。此頁面提供指令行指令的預覽。單擊“Finish”之後運作HPO任務。如圖28、29、30所示
說明
可使用vega-process查詢正在運作的任務,使用vega-kill -p PID或vega-kill -t task_id結束正在運作的vega任務。
圖28
圖29
圖30
4.6 過程和結果擷取
任務開始後,HPO視窗關閉,Output視窗中将提示可到遠端檢視HPO任務運作過程和結果,如圖31~35所示。
圖31
圖32
圖33
圖34
圖35
在Output視窗所示路徑下會生成tasks檔案夾,tasks檔案夾下有名為{task_id}的檔案夾,此檔案下有檔案夾logs、output和workers。
├── tasks
│ ├── {task_id}
│ │ ├──logs
│ │ │ ├──hpo_worker_{worker_id}。log // 第worker_id個worker上進行hpo的日志檔案
│ │ │ ├──pipeline.log // 整個hpo任務日志檔案
│ │ ├──output
│ │ │ ├──config.yml // 配置檔案
│ │ │ ├──report.json // hpo任務的報告檔案
│ │ │ ├──hpo
│ │ │ │ ├──hps_{worker_id}.json //搜尋出的最佳超參值
│ │ │ │ ├──performance_{worker_id}.json //搜尋出的最佳優化名額值
│ │ │ │ ├──output.csv //優化名額值彙總檔案
│ │ ├──workers
│ │ │ ├──hpo
│ │ │ │ ├──{worker_id}
│ │ │ │ │ ├──hps_{worker_id}.json //超參值
│ │ │ │ │ ├──performance_{worker_id}.json //優化目标值
五、經驗總結
利用HPO界面調優會在所指定的路徑下生成相應的執行檔案,直接在背景執行run.sh檔案會報錯。
圖36
解決辦法:可更改生成的config.yml檔案中的task_id為非純數字的名稱,然後利用vega config.yml -d NPU指令在背景執行HPO調優。
圖37
六、關于MindStudio更多的内容
如果需要了解關于MindStudio更多的資訊,請查閱昇騰社群中MindStudio的使用者手冊,裡面模型訓練、腳本轉換、模型開發、算子開發、精度對比、AI Core Error分析工具、AutoML工具(Beta)、Benchmark工具、專家系統工具等各種使用安裝操作的詳細介紹。
如果在使用MindStudio過程中遇到任何問題,也可以在昇騰社群中的昇騰論壇進行提問,會有華為内部技術人員對其進行解答,如下圖。
圖38