Atlas 500 (PT BR) - edgebr/huawei-smart-cities-wiki GitHub Wiki
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.
No contexto atual temos o seguinte fluxo de preparação e execução:
- Temos o modelo YOLOv5 treinado (algo como
weights.pt
) -- ver seção YOLOv5. - Convertemos
weights.pt
paraweights.onnx
-- ver próxima seção. - Convertemos, então, para
weights.om
via ATC, que será implantado em uma aplicação Python (via pyACL) dentro de uma imagem docker. - Por fim, essa imagem é enviada à Huawei Cloud e, posteriormente, baixada e executada no Atlas 500.
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 --imgsz 384 --batch 1 --include onnx --opset 11 --simplify --device 0
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 é 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.
Links
- https://support.huawei.com/enterprise/br/doc/EDOC1100192470/7ebcb1b3/cann
- https://e.huawei.com/br/products/cloud-computing-dc/atlas/cann
Ascend Tool Compiler
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. Os valores aqui seguem os parâmetros do modelo treinado e convertido para.onnx
.
- A ordem dos valores segue
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
representaoffline model
.
Links
- https://support.huawei.com/enterprise/br/doc/EDOC1100192470/7d7ed5e8/atc-tool
- https://support.huaweicloud.com/intl/en-us/instg-cli-cann/atlascli_03_0007.html
- https://support.huaweicloud.com/intl/en-us/atctool-cann502alphaXinfer/atlasatc_16_0004.html
Implantação de Modelo
PyACL
Python Ascend Computing Language (pyACL) é uma biblioteca de API em Python encapsulada usando CPython baseada na Linguagem Comum Ascend (ACL). Com pyACL podemos usar Python para gerenciar a execução e os recursos dos processadores Ascend.
Links
- https://toscode.gitee.com/tianyu__zhou/pyacl_samples/
- https://support.huaweicloud.com/intl/en-us/usermanual-cannApplicationDev330/atlaspython_01_0001.html
- https://support.huawei.com/enterprise/fr/doc/EDOC1100192513/7e88dc5e/pyacl-overview
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 outro 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.
Para facilitar a implantação do modelo no Atlas 500, podemos enviar a imagem para o Software Repository for Containers (SWR) da Huawei Cloud. Ver seção Huawei Cloud - SWR.
O nome de nossa imagem na Huawei Cloud é: swr.la-south-2.myhuaweicloud.com/huawei-smart-cities/a500
.
Execução do container
Após baixarmos a imagem da aplicação containerizada via docker pull
, podemos, então, executá-la:
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.
Links