Skip to content

Atlas 500 PTBR

BrunoGeorgevich edited this page Feb 1, 2022 · 3 revisions

Conversão de Modelo

A arquitetura Ascend não executa os modelos treinados nos frameworks tradicionais, como TensorFlow ou PyTorch. É preciso convertê-los para algo compatível, que é o caso do Da Vinci Offline Model.

PyTorch & ONNX

Em posse do repositório da YOLOv5 e do modelo treinado (algo como weights.pt), executamos a seguinte linha de comando para obter o modelo no formato .onnx

python yolov5/export.py --weights path/to/weights.pt --batch 1 --include onnx --opset 11 --simplify

Ao fim, se tudo ocorrer corretamente, devemos ter um weights.onnx. Além disso, note que o opset (11) importa.

Compute Architecture for Neural Networks (CANN)

CANN

CANN é a base de capacidade de computação de hardware dos processadores Ascend e garante a execução de redes neurais profundas através de seus módulos, como Ascend CL, Graph Engine etc.

TODO: paths.

Links

Ascend Tool Compiler

ATC architecture

ATC é uma ferramenta usada para converter modelos de código-aberto para modelos offline suportados pelos processadores Ascend.

Em posse dos pesos convertidos para .onnx (algo como weights.onnx), devemos executar a linha de comando abaixo para obter o desejado modelo Da Vinci.

atc --input_shape="images:1,3,384,384" --check_report="network_analysis.report" --input_format="NCHW" --output="weights" --soc_version="Ascend310" --framework=5 --model="weights.onnx"
  • input_shape representa o nome (images) e shape (1, 3, 384, 384) do nó de entrada da rede.
    • A ordem dos valores segue input_format, que é batch_size, channels, height e width.
  • soc_version representa a arquitetura final para qual o modelo será convertido -- Ascend310, a unidade de processamento neural (UPN) presente no Atlas 500.
  • framework representa a saída de conversão, que nesse caso é ONNX.
  • model representa o nome do arquivo a ser convertido.
  • output representa o nome do arquivo de saída. Ao fim, será output_name.om, onde .om representa offline model.

Links

Implantação de Modelo

PyACL

PyACL

Python Ascend Computing Language (pyACL) é uma biblioteca de API em Python encapsulada usando CPython baseada na Linguagem Comum Ascend (ACL). Usuários pode usar Python para gerenciar a execução e os recursos dos processadores Ascend.

Links

Firmware

Deve-se usar a versão A500-3000-3010-firmware_20.3.0 (a ser obtido aqui e seguido os passos daqui) para que tenha sucesso na importação e uso da biblioteca PyACL.

Container

Criação da imagem

Criação do container com os scripts de inferência:

docker build -t hsc5g-a500 --build-arg NNRT_PKG=Ascend-cann-nnrt_20.3.0_linux-aarch64.run .

O Dockerfile relativo se encontra nesse https://github.com/edgebr/HuaweiAtlas/blob/main/Inference/Dockerfile repositório, bem como os scripts. Note o uso do pacote NNRT. Esse pacote contém as libs necessárias para inferência com o Ascend310, como ACLlib.

Execução do container

docker run --device=/dev/davinci0 --device=/dev/davinci_manager --device=/dev/hisi_hdc --device /dev/devmm_svm -v /usr/bin/vi:/usr/local/bin/vi -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi -v /home/data/miniD/driver/lib64:/home/data/miniD/driver/lib64 -it swr.la-south-2.myhuaweicloud.com/huawei-smart-cities/a500:latest

onde latest é a versão mais recente da imagem no SWR.

Links