MindSpore基本原理
MindSpore基本原理
? MindSpore介紹
o 自動微分
o 自動并行
? 安裝
o pip方式安裝
o 源碼編譯方式安裝
o Docker鏡像
? 快速入門
? 文檔
MindSpore介紹
MindSpore是一種適用于端邊云場景的新型開源深度學習訓練/推理框架。 MindSpore提供了友好的設計和高效的執行,旨在提升數據科學家和算法工程師的開發體驗,并為Ascend AI處理器提供原生支持,以及軟硬件協同優化。
同時,MindSpore作為全球AI開源社區,致力于進一步開發和豐富AI軟硬件應用生態。
自動微分
當前主流深度學習框架中有三種自動微分技術:
? 基于靜態計算圖的轉換:編譯時將網絡轉換為靜態數據流圖,將鏈式法則應用于數據流圖,實現自動微分。
? 基于動態計算圖的轉換:記錄算子過載正向執行時,網絡的運行軌跡,對動態生成的數據流圖,應用鏈式法則,實現自動微分。
? 基于源碼的轉換:該技術是從功能編程框架演進而來,以即時編譯(Just-in-time Compilation,JIT)的形式,對中間表達式(程序在編譯過程中的表達式)進行自動差分轉換,支持復雜的控制流場景、高階函數和閉包。
TensorFlow早期采用的是靜態計算圖,PyTorch采用的是動態計算圖。靜態映射可以利用靜態編譯技術,來優化網絡性能,但是構建網絡或調試網絡非常復雜。動態圖的使用非常方便,但很難實現性能的極限優化。
MindSpore找到了另一種方法,即基于源代碼轉換的自動微分。一方面,它支持自動控制流的自動微分,像PyTorch這樣的模型構建非常方便。另一方面,MindSpore可以對神經網絡進行靜態編譯優化,以獲得更好的性能。
MindSpore自動微分的實現可以理解為程序本身的符號微分。MindSpore IR是一個函數中間表達式,它與基礎代數中的復合函數具有直觀的對應關系。復合函數的公式由任意可推導的基礎函數組成。MindSpore IR中的每個原語操作都可以對應基礎代數中的基本功能,從而可以建立更復雜的流控制。
自動并行
MindSpore自動并行的目的,構建數據并行、模型并行和混合并行相結合的訓練方法。該方法能夠自動選擇開銷最小的模型切分策略,實現自動分布并行訓練。
目前MindSpore采用的是算子切分的細粒度并行策略,即圖中的每個算子被切分為一個集群,完成并行操作。在此期間的切分策略可能非常復雜,但是作為一名Python開發者,無需關注底層實現,只要頂層API計算是有效的即可。
安裝
pip方式安裝
MindSpore提供跨多個后端的構建選項:
使用pip命令安裝,以CPU和Ubuntu-x86build版本為例:
- 請從MindSpore下載頁面下載并安裝whl包。
pip install https://ms-release.obs.cn-north-4.myhuaweicloud.com/1.1.0/MindSpore/cpu/ubuntu_x86/mindspore-1.1.0-cp37-cp37m-linux_x86_64.whl - 執行以下命令,驗證安裝結果。
- import numpy as np
- import mindspore.context as context
- import mindspore.nn as nn
- from mindspore import Tensor
- from mindspore.ops import operations as P
- context.set_context(mode=context.GRAPH_MODE, device_target=“CPU”)
- class Mul(nn.Cell):
-
def __init__(self): -
super(Mul, self).__init__() -
self.mul = P.Mul() -
def construct(self, x, y): -
return self.mul(x, y) - x = Tensor(np.array([1.0, 2.0, 3.0]).astype(np.float32))
- y = Tensor(np.array([4.0, 5.0, 6.0]).astype(np.float32))
- mul = Mul()
print(mul(x, y))
[ 4. 10. 18.]
使用pip方式,在不同的環境安裝MindSpore,可參考以下文檔。
? Ascend環境使用pip方式安裝MindSpore
? GPU環境使用pip方式安裝MindSpore
? CPU環境使用pip方式安裝MindSpore
源碼編譯方式安裝
使用源碼編譯方式,在不同的環境安裝MindSpore,可參考以下文檔。
? Ascend環境使用源碼編譯方式安裝MindSpore
? GPU環境使用源碼編譯方式安裝MindSpore
? CPU環境使用源碼編譯方式安裝MindSpore
Docker鏡像
MindSpore的Docker鏡像托管在Docker Hub上。 目前容器化構建選項支持情況如下:
注意: 不建議從源頭構建GPU devel Docker鏡像后直接安裝whl包。強烈建議在GPU runtime Docker鏡像中傳輸,并安裝whl包。
? CPU
對于CPU后端,可以直接使用以下命令獲取并運行最新的穩定鏡像:
docker pull mindspore/mindspore-cpu:1.1.0
docker run -it mindspore/mindspore-cpu:1.1.0 /bin/bash
? GPU
對于GPU后端,確保nvidia-container-toolkit已經提前安裝,以下是Ubuntu用戶安裝指南:
DISTRIBUTION=$(. /etc/os-release; echo IDIDIDVERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$DISTRIBUTION/nvidia-docker.list | tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit nvidia-docker2
sudo systemctl restart docker
編輯文件 daemon.json:
$ vim /etc/docker/daemon.json
{
“runtimes”: {
“nvidia”: {
“path”: “nvidia-container-runtime”,
“runtimeArgs”: []
}
}
}
再次重啟docker:
sudo systemctl daemon-reload
sudo systemctl restart docker
使用以下命令獲取并運行最新的穩定鏡像:
docker pull mindspore/mindspore-gpu:1.1.0
docker run -it -v /dev/shm:/dev/shm --runtime=nvidia --privileged=true mindspore/mindspore-gpu:1.1.0 /bin/bash
要測試Docker是否正常工作,運行下面的Python代碼并檢查輸出:
import numpy as np
import mindspore.context as context
from mindspore import Tensor
from mindspore.ops import functional as F
context.set_context(mode=context.PYNATIVE_MODE, device_target=“GPU”)
x = Tensor(np.ones([1,3,3,4]).astype(np.float32))
y = Tensor(np.ones([1,3,3,4]).astype(np.float32))
print(F.tensor_add(x, y))
[[[ 2. 2. 2. 2.],
[ 2. 2. 2. 2.],
[ 2. 2. 2. 2.]],
[[ 2. 2. 2. 2.],
[ 2. 2. 2. 2.],
[ 2. 2. 2. 2.]],
[[ 2. 2. 2. 2.],
[ 2. 2. 2. 2.],
[ 2. 2. 2. 2.]]]
總結
以上是生活随笔為你收集整理的MindSpore基本原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ONNX 实时graph优化方法
- 下一篇: MindSpore整体架构介绍