一、参考资料
mindspore快速安装
二、重要说明
经过博主多次尝试多个版本,Atlas 200 DK(Model 3000)无法安装MindSpore Ascend版本。
三、准备工作
1. 测试环境
设备型号:Atlas 200 DK(Model: 3000)
Operating System + Version: Ubuntu 18.04.6 LTS
CPU Type: 8核Cortex-A55
AI CPU number: 2
control CPU number: 6
RAM: 8GB
miscroSD: 128GB
CANN: 6.0.RC1.alpha005
HwHiAiUser@davinci-mini:~$ npu-smi info -t aicpu-config -i 0 -c 0
Current AI CPU number : 2
Current control CPU number : 6
Number of AI CPUs set : 2
Number of control CPUs set : 6
2. MindSpore与CANN版本对齐
通过 链接 查询MindSpore与Ascend配套软件包的版本配套关系。
MindSpore与CANN的版本强绑定,如果当前设备无法升级CANN 6.0.1,则无法使用MindSpore 1.10.0。
3. 安装mindspore_ascend
详细过程,请参考:pip方式安装MindSpore Ascend 310版本
4. 验证是否安装成功
4.1 方法一
import mindspore as ms
# ms.set_context(device_target='CPU')
# ms.set_context(device_target='GPU')
ms.set_context(device_target="Ascend")
ms.set_context(device_id=0)
mindspore.run_check()
如果输出以下结果,则说明mindspore_ascend安装成功。
MindSpore version: 版本号
The result of multiplication calculation is correct, MindSpore has been installed on platform [Ascend] successfully!
4.2 方法二
import numpy as np
import mindspore as ms
import mindspore.ops as ops
ms.set_context(device_target="Ascend")
x = ms.Tensor(np.ones([1,3,3,4]).astype(np.float32))
y = ms.Tensor(np.ones([1,3,3,4]).astype(np.float32))
print(ops.add(x, y))
如果输出以下结果,则说明mindspore_ascend安装成功。
[[[[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.]]]]
4.3 方法三
ascend310_single_op_sample
这是一个[1, 2, 3, 4]
与[2, 3, 4, 5]
相加的简单样例,代码工程目录结构如下:
└─ascend310_single_op_sample
├── CMakeLists.txt // 编译脚本
├── README.md // 使用说明
├── main.cc // 主函数
└── tensor_add.mindir // MindIR模型文件
unzip ascend310_single_op_sample.zip
cd ascend310_single_op_sample
# 编译
cmake . -DMINDSPORE_PATH=`pip show mindspore-ascend | grep Location | awk '{print $2"/mindspore"}' | xargs realpath`
make
# 执行
./tensor_add_sample
如果输出以下结果,则说明mindspore_ascend安装成功。
3
5
7
9
四、测试代码
1. 示例一
用MindSpore搭建模型,并进行测试。
"""
MindSpore implementation of `MobileNetV1`.
Refer to MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications.
"""
import time
from mindspore import nn, Tensor, ops
import mindspore.common.initializer as init
import mindspore as ms
from PIL import Image
from mindcv.data import create_transforms
import numpy as np
def depthwise_separable_conv(inp: int, oup: int, stride: int) -> nn.SequentialCell:
return nn.SequentialCell(
# dw
nn.Conv2d(inp, inp, 3, stride, pad_mode="pad", padding=1, group=inp, has_bias=False),
nn.BatchNorm2d(inp),
nn.ReLU(),
# pw
nn.Conv2d(inp, oup, 1, 1, pad_mode="pad", padding=0, has_bias=False),
nn.BatchNorm2d(oup),
nn.ReLU(),
)
class MobileNetV1(nn.Cell):
r"""MobileNetV1 model class, based on
`"MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications" <https://arxiv.org/abs/1704.04861>`_
Args:
alpha: scale factor of model width. Default: 1.
in_channels: number the channels of the input. Default: 3.
num_classes: number of classification classes. Default: 1000.
"""
def __init__(self,
alpha: float = 1.,
in_channels: int = 3,
num_classes: int = 1000) -> None:
super().__init__()
input_channels = int(32 * alpha)
# Setting of depth-wise separable conv
# c: number of output channel
# s: stride of depth-wise conv
block_setting = [
# c, s
[64, 1],
[128, 2],
[128, 1],
[256, 2],
[256, 1],
[512, 2],
[512, 1],
[512, 1],
[512, 1],
[512, 1],
[512, 1],
[1024, 2],
[1024, 1],
]
features = [
nn.Conv2d(in_channels, input_channels, 3, 2, pad_mode="pad", padding=1, has_bias=False),
nn.BatchNorm2d(input_channels),
nn.ReLU()
]
for c, s in block_setting:
output_channel = int(c * alpha)
features.append(depthwise_separable_conv(input_channels, output_channel, s))
input_channels = output_channel
self.features = nn.SequentialCell(features)
# self.pool = GlobalAvgPooling()
self.pool = nn.AdaptiveAvgPool2d(output_size=(1, 1))
self.classifier = nn.Dense(input_channels, num_classes)
self._initialize_weights()
def _initialize_weights(self) -> None:
"""Initialize weights for cells."""
for _, cell in self.cells_and_names():
if isinstance(cell, nn.Conv2d):
cell.weight.set_data(init.initializer(init.XavierUniform(),
cell.weight.shape,
cell.weight.dtype))
if isinstance(cell, nn.Dense):
cell.weight.set_data(init.initializer(init.TruncatedNormal(),
cell.weight.shape,
cell.weight.dtype))
def forward_features(self, x: Tensor) -> Tensor:
x = self.features(x)
return x
def forward_head(self, x: Tensor) -> Tensor:
squeeze = ops.Squeeze(0)
x = squeeze(x)
x = self.pool(x)
squeeze = ops.Squeeze(2)
x = squeeze(x)
x = x.transpose()
x = self.classifier(x)
return x
def construct(self, x: Tensor) -> Tensor:
x = self.forward_features(x)
x = self.forward_head(x)
return x
def mobilenet_v1_100_224(pretrained: bool = False, num_classes: int = 1000, in_channels=3, **kwargs) -> MobileNetV1:
"""Get MobileNetV1 model without width scaling.
Refer to the base class `models.MobileNetV1` for more details.
"""
model = MobileNetV1(alpha=1.0, in_channels=in_channels, num_classes=num_classes, **kwargs)
return model
if __name__ == '__main__':
# ms.set_context(device_target='GPU')
# ms.set_context(device_target='CPU')
ms.set_context(device_target="Ascend")
ms.set_context(device_id=0)
ms.set_seed(1)
ms.set_context(mode=ms.PYNATIVE_MODE)
img = Image.open("image.jpg").convert("RGB")
# create transform
transform_list = create_transforms(
dataset_name="imagenet",
is_training=False,
)
transform_list.pop(0)
for transform in transform_list:
img = transform(img)
img = np.expand_dims(img, axis=0)
# create model
network = mobilenet_v1_100_224()
for i in range(100):
# warmup
network(ms.Tensor(img))
time_begin = time.time()
for i in range(1000):
# predict
network(ms.Tensor(img))
time_total = (time.time() - time_begin) * 1000 / 1000
print(f"total time is: {time_total}")
# print(network)
2. 示例二
调用 mindcv
库中的预训练模型进行测试。
"""MindSpore Inference Script
"""
import numpy as np
from PIL import Image
import mindspore as ms
from mindcv.data import create_transforms
from mindcv.models import create_model
import time
# ms.set_context(device_target='CPU')
# ms.set_context(device_target='GPU')
ms.set_context(device_target='Ascend')
ms.set_context(device_id=0)
ms.set_context(max_device_memory="3.5GB")
def main():
ms.set_seed(1)
ms.set_context(mode=ms.PYNATIVE_MODE)
img = Image.open("image.jpg").convert("RGB")
# create transform
transform_list = create_transforms(
dataset_name="imagenet",
is_training=False,
)
transform_list.pop(0)
for transform in transform_list:
img = transform(img)
img = np.expand_dims(img, axis=0)
# create model
network = create_model(
model_name="mobilenet_v1_100", # mobilenet_v1_100_224
pretrained=False,
)
network.set_train(False)
for i in range(100):
# warmup
network(ms.Tensor(img))
time_begin = time.time()
for i in range(1000):
# predict
network(ms.Tensor(img))
time_total = (time.time() - time_begin) * 1000 / 1000
print(f"total time is: {time_total}")
if __name__ == "__main__":
main()
五、FAQ
Q:RuntimeError: Get acltdt handle failed
File "/home/HwHiAiUser/miniconda3/envs/mindspore19/lib/python3.9/site-packages/mindspore/nn/cell.py", line 120, in __init__
init_pipeline()
RuntimeError: Get acltdt handle failed
----------------------------------------------------
- C++ Call Stack: (For framework developers)
----------------------------------------------------
mindspore_ascend 1.9.0
测试失败。
Q:Load dynamic library libmindspore_ascend failed, returns
[WARNING] ME(22553:281470681698320,MainProcess):2024-05-22-12:56:02.416.603 [mindspore/run_check/_check_version.py:296] MindSpore version 1.10.0 and Ascend AI software package (Ascend Data Center Solution)version 1.83 does not match, the version of software package expect one of ['1.84'], please reference to the match info on: https://www.mindspore.cn/install
[ERROR] ME(22553,fffeffff5010,python):2024-05-22-12:56:02.812.186 [mindspore/ccsrc/runtime/hardware/device_context_manager.cc:46] LoadDynamicLib] Load dynamic library libmindspore_ascend failed, returns [liboptiling.so: cannot open shared object file: No such file or directory].
Traceback (most recent call last):
File "/home/HwHiAiUser/Downloads/mindcv_demo.py", line 11, in <module>
import mindspore as ms
File "/home/HwHiAiUser/miniconda3/envs/mindspore21/lib/python3.9/site-packages/mindspore/__init__.py", line 18, in <module>
from mindspore.run_check import run_check
File "/home/HwHiAiUser/miniconda3/envs/mindspore21/lib/python3.9/site-packages/mindspore/run_check/__init__.py", line 17, in <module>
from ._check_version import check_version_and_env_config
File "/home/HwHiAiUser/miniconda3/envs/mindspore21/lib/python3.9/site-packages/mindspore/run_check/_check_version.py", line 474, in <module>
check_version_and_env_config()
File "/home/HwHiAiUser/miniconda3/envs/mindspore21/lib/python3.9/site-packages/mindspore/run_check/_check_version.py", line 446, in check_version_and_env_config
env_checker.set_env()
File "/home/HwHiAiUser/miniconda3/envs/mindspore21/lib/python3.9/site-packages/mindspore/run_check/_check_version.py", line 357, in set_env
raise EnvironmentError(
OSError: No such directory: /usr/local/Ascend/ascend-toolkit/latest/opp/built-in/op_impl/ai_core/tbe, Please check if Ascend AI software package (Ascend Data Center Solution) is installed correctly.
mindspore_ascend 1.10.0
测试失败。