Atlas 200 DK(Model 3000)安装MindSpore Ascend版本

一、参考资料

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 测试失败。

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花花少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值