[2023 CANN Training Camp Temporada 1]: Explicação detalhada do conhecimento básico no desenvolvimento de aplicativos AscendCL

Ascend (Ascend) CANN (Compute Architecture for Neural Networks) é um kit de desenvolvimento de software para processadores de IA lançado pela Huawei para dar suporte ao desenvolvimento e implantação de vários aplicativos de IA. Seu processo de desenvolvimento de aplicativos de rede neural profunda pode ser dividido nas seguintes etapas principais

Desenvolvimento de aplicativos AscendCL, as principais etapas do processo de desenvolvimento de aplicativos de raciocínio de rede de aprendizado profundo são as seguintes:

  1. Prepare o modelo: primeiro, treine um modelo de rede neural profunda usando estruturas de aprendizado profundo convencionais, como TensorFlow, PyTorch e Caffe. Após o treinamento, exporte o modelo para o formato correspondente, como o arquivo *.pb do TensorFlow, o arquivo *.pth do PyTorch, o arquivo *.prototxt e o arquivo *.caffemodel do Caffe.
  2. Conversão de modelo: Use a ferramenta ATC (AI Tensor Compiler) no Ascend CANN para converter o modelo treinado em um modelo offline (arquivo OM) que pode ser reconhecido e executado pelo processador Ascend. Durante este processo, o modelo pode precisar ser otimizado e quantificado para melhorar a eficiência de execução no processador Ascend.
  3. Desenvolva programas aplicativos: de acordo com os requisitos reais do aplicativo, use componentes de software (como AscendCL, AICPU etc.) e APIs fornecidas pela Ascend para desenvolver aplicativos de rede neural profunda. Isso pode incluir operações como pré-processamento de dados de entrada, carregamento de modelo, entrada e saída de modelo, execução de raciocínio e pós-processamento de dados de saída. O processo é mostrado na figura abaixo .
  4. Compilar e implantar: Compile o aplicativo desenvolvido em um arquivo executável e implante-o junto com o modelo offline convertido (arquivo OM) no dispositivo do processador Ascend AI. Os dispositivos do processador Ascend podem ser servidores em nuvem, dispositivos de borda, etc.
  5. Execução e otimização: execute o aplicativo de rede neural profunda implantado no processador Ascend AI. Durante a execução, gargalos de desempenho podem ser encontrados por meio de ferramentas de análise e depuração e otimizações correspondentes podem ser feitas para melhorar ainda mais o desempenho e a eficiência do aplicativo.

insira a descrição da imagem aqui

Através das cinco etapas acima, os usuários podem usar o kit de ferramentas Ascend CANN para desenvolver, implantar e otimizar aplicativos de rede neural profunda para processadores Ascend AI

O texto explica principalmente partes do ATC e desenvolvimento de aplicativos

Conversão de modelo (ATC)

ATC (AI Tensor Compiler) é um componente importante no kit de ferramentas Ascend CANN, que é usado principalmente para converter modelos de diferentes estruturas de aprendizado profundo em modelos offline (arquivos OM) que o processador Ascend AI pode reconhecer e executar.

As principais funções e características do ATC são as seguintes:

  1. Oferece suporte a uma variedade de estruturas de aprendizado profundo: o ATC oferece suporte à conversão de modelos de estruturas de aprendizado profundo convencionais, como TensorFlow, PyTorch, Caffe e ONNX em modelos que podem ser executados por processadores Ascend.
  2. Otimização do modelo: Durante o processo de conversão do modelo, o ATC pode otimizar o modelo para melhorar a eficiência de execução do modelo no processador Ascend AI. Os métodos de otimização incluem fusão de operação, otimização de operador, etc.
  3. Suporte de quantização: o ATC suporta a conversão de modelos de ponto flutuante em modelos de ponto fixo de baixa precisão (como int8) para reduzir o tamanho do modelo e os requisitos de recursos de computação e, ao mesmo tempo, melhorar o modelo no processador Ascend AI, mantendo velocidade de execução de alta precisão de inferência.
  4. Geração de modelo offline: Após a conversão ATC, o usuário obterá um modelo offline (arquivo OM) adequado para o processador Ascend AI. Este modelo pode ser implantado diretamente em
    dispositivos da série Ascend para cálculos de inferência.

Para usar o ATC para conversão de modelo, os usuários precisam selecionar os parâmetros de conversão apropriados com base na estrutura de aprendizagem profunda do modelo de origem e nos requisitos de conversão. Após a conclusão da conversão, os usuários podem usar outros componentes de software fornecidos pela Ascend (como AscendCL, AICPU, etc.) para executar e implantar modelos off-line no processador Ascend AI. O diagrama de arquitetura funcional da ferramenta ATC é o seguinte:
insira a descrição da imagem aqui
Analisador analisa e converte-o em um gráfico IR de estado intermediário. Após uma série de operações, como preparação de gráficos, divisão de gráficos, otimização de gráficos e compilação de gráficos, o IR de estado intermediário é transformado em um modelo off-line adaptado ao processador Ascend AI. Os usuários podem carregar o modelo através da interface AscendCL o software implementa o raciocínio

processo de conversão ATC

O processo de ATC pode ser resumido nas seguintes etapas:

  1. Preparação do ambiente: obtenha ferramentas ATC, defina variáveis ​​de ambiente
  2. Prepare o modelo de origem: primeiro, use estruturas de aprendizado profundo convencionais, como TensorFlow, PyTorch e Caffe, para treinar um modelo de rede neural profunda. Após o treinamento, exporte o modelo para o formato correspondente, como o arquivo *.pb do TensorFlow, o arquivo *.onnx do PyTorch, o arquivo *.prototxt e o arquivo *.caffemodel do Caffe.
  3. Instale a ferramenta ATC: Certifique-se de ter instalado o kit de ferramentas Ascend CANN, que inclui a ferramenta ATC. Normalmente, após a instalação do kit de ferramentas CANN, a ferramenta ATC será instalada automaticamente no caminho correspondente.
  4. Configurar parâmetros de conversão: Para usar a ferramenta ATC para conversão de modelo, você precisa definir alguns parâmetros de conversão para o modelo de origem, como nós de entrada e saída, tipos de dados, opções de otimização, etc. Esses parâmetros dependem da estrutura de aprendizagem profunda do modelo de origem, estrutura de rede e requisitos de conversão.
  5. Execute a conversão do modelo: execute o comando ATC e forneça os parâmetros de conversão corretos para iniciar o processo de conversão do modelo. Durante o processo de conversão, o ATC converterá o modelo de origem em um modelo off-line (arquivo OM) adequado para o processador Ascend AI, enquanto executa a otimização e quantização do modelo (se necessário).
  6. Verifique os resultados da conversão: após a conclusão da conversão, use o modelo offline convertido (arquivo OM) para teste de inferência para garantir que a conversão do modelo esteja correta e que o desempenho atenda às expectativas. Quando necessário, os parâmetros de transformação podem ser ajustados e a transformação do modelo refeita para obter o melhor desempenho de inferência. Através das cinco etapas acima, os usuários podem usar a ferramenta ATC para converter os modelos de várias estruturas de aprendizado profundo em modelos offline executáveis ​​(arquivos OM) no processador Ascend AI.

insira a descrição da imagem aqui

desenvolver aplicativos

insira a descrição da imagem aqui

pré-processamento de dados

Afetados por fatores como estrutura de rede e métodos de treinamento, a maioria dos modelos de rede neural tem restrições de formato de dados nos dados de entrada. No campo da visão computacional, essa limitação se reflete principalmente no tamanho da imagem, gama de cores e normalização. parâmetros, etc. Se o tamanho e o formato da imagem ou vídeo de origem são inconsistentes com os requisitos do modelo de rede, precisamos processar a imagem ou vídeo de origem em uma imagem ou vídeo que atenda aos requisitos do modelo.

insira a descrição da imagem aqui
O CANN fornece dois conjuntos de métodos para pré-processamento de dados: AIPP e DVPP. A tabela a seguir descreve as principais características e diferenças dos métodos de pré-processamento de dados AscendCL AIPP e raciocínio DVPP:

método de pré-processamento AIPP DVPP
Propósito Pré-processamento de imagem antes da inferência do modelo de IA Pré-processamento de imagem no processamento de vídeo
objeto de processamento imagem parada sequência dinâmica de vídeo
equipamento Processador Ascend AI (Ascend) Processador Ascend AI (Ascend)
Função conversão de gama conversão de gama
recorte de imagem recorte de imagem
Conversão de formato de dados (como FP32 para FP16 Conversão de formato de dados (como FP32 para FP16
rearranjo de canais rearranjo de canais
Cenário de Aplicação Raciocínio do modelo de IA Processamento de vídeo (como decodificação de vídeo, codificação, etc.)

O DVPP pode ser usado independentemente ou em combinação. Em um cenário combinado, o DVPP geralmente é usado para decodificar, cortar e ampliar fotos/vídeos primeiro. No entanto, devido a restrições de hardware do DVPP, o formato e a resolução da imagem após o processamento do DVPP podem não atender aos requisitos do modelo, por isso precisa passar por AIPP para processamento posterior, como conversão de gama de cores, fosco, preenchimento etc.

Veja a seguir um exemplo de cenário: insira um arquivo de imagem JPEG (o formato de imagem de origem é YUV420), após JEPGD+VPC, gere uma imagem no formato YUV420SP, converta o formato de imagem para RGB por meio de AIPP e execute a configuração de normalização no mesmo tempo. Envie a imagem para o modelo para inferência
insira a descrição da imagem aqui

Funções principais do DVPP

DVPP (Plataforma de Processamento de Vídeo Digital) é responsável pelo processamento de vídeo digital no processador Ascend AI. Seus principais módulos funcionais incluem decodificação e codificação, processamento de imagem e assim por diante. Aqui, apresentaremos a decodificação de imagens JPEGD, o pré-processamento visual VPC e as funções do módulo JPEGD+VPC em detalhes.

1. Decodificação de imagem JPEGD

JPEGD (JPEG Decoder) é um módulo funcional responsável pela decodificação de imagens JPEG em DVPP. JPEGD pode decodificar dados de imagem codificados em JPEG em outros formatos de pixel, como YUV420SP, YUV422SP e RGB. A decodificação de imagem JPEG é comum em muitos aplicativos de IA porque os dados da imagem geralmente são armazenados e transmitidos no formato JPEG, enquanto os modelos de IA exigem dados em outros formatos de pixel.

2. Pré-processamento visual VPC

VPC (Visual Processing Component) é um módulo funcional responsável pelo pré-processamento visual no DVPP. O VPC fornece uma variedade de funções de processamento de imagem, incluindo: Conversão de gama: converte uma imagem de uma gama de cores para outra, como de YUV para RGB. Zoom da imagem: Altere o tamanho da imagem para ampliá-la ou reduzi-la. Corte de imagem: cortar uma área específica de uma imagem original para atender a requisitos específicos de tamanho ou proporção. Reordenação de canal: reordena os canais de imagem para atender aos requisitos de ordem de canal da entrada do modelo.
O VPC é muito importante para o pré-processamento de aplicativos de processamento de vídeo e IA, porque eles precisam pré-processar os dados brutos da imagem para atender às necessidades de processamento e análise subsequentes.

3. Módulo JPEGD+VPC

O módulo JPEGD+VPC é um módulo combinado que combina decodificação de imagem JPEGD e funções de pré-processamento visual VPC. Usando este módulo, os desenvolvedores podem facilmente decodificar dados de imagem codificados em JPEG em outros formatos de pixel e aplicar diretamente as funções de processamento de imagem fornecidas pelo VPC durante o processo de decodificação. Essa abordagem integrada ajuda a simplificar o processo de pré-processamento de dados e melhorar a eficiência do processamento.

Gerenciamento de memória de host e dispositivo e transmissão de dados

insira a descrição da imagem aqui

No AscendCL, o gerenciamento de memória e a transmissão de dados são necessários entre o Host (ou seja, a memória e a CPU) e o Dispositivo (ou seja, o processador Ascend AI (NPU e memória do dispositivo)) para trabalharem juntos nas tarefas de inferência.

Ao carregar os dados de entrada no código de desenvolvimento do aplicativo, você precisa solicitar a memória do host para armazenamento. Após o processamento dos dados de entrada, você precisa copiar os dados processados ​​da memória do host para a memória de entrada do modelo do dispositivo, então que o dispositivo pode realizar inferência de modelo.

A seguir estão os principais métodos para implementar o gerenciamento de memória e a transferência de dados:

gerenciamento de memória

Aplicação e liberação de memória do lado do host:

Use aclrtMallocHost e aclrtFreeHost para aplicar e liberar a memória no lado do Host. Eles são usados ​​para alocar uma área de memória disponível no lado do host para armazenar dados que precisam ser transmitidos entre o host e o dispositivo

void* hostBuffer;
size_t bufferSize = ...; // 分配所需内存大小
aclError ret = aclrtMallocHost(&hostBuffer, bufferSize);
// 使用 hostBuffer 进行一些操作,如数据加载等
...
aclrtFreeHost(hostBuffer); // 在不再需要时释放分配的内存

Gerenciamento de memória do lado do dispositivo:

Use aclrtMalloc e aclrtFree para alocar e liberar memória no lado do dispositivo. Eles são usados ​​para alocar uma área de memória disponível no lado do dispositivo para armazenar dados que precisam ser transmitidos entre o host e o dispositivo.

void* deviceBuffer;
size_t bufferSize = ...; // 分配所需内存大小
aclError ret = aclrtMalloc(&deviceBuffer, bufferSize);
// 使用 deviceBuffer 进行一些操作,如数据传输、模型推理等
...
aclrtFree(deviceBuffer); // 在不再需要时释放分配的内存

transmissão de dados

A transmissão de dados refere-se à transmissão de dados entre o host e o dispositivo e geralmente é usada para transmitir dados de entrada ao dispositivo para inferência de modelo e, em seguida, transmitir os resultados da inferência de volta ao host.

Transmissão de dados do host para o dispositivo

Use a função aclrtMemcpy para copiar dados da memória do host para a memória do dispositivo. Esta função precisa especificar o endereço de origem, o endereço de destino e o tamanho dos dados a serem copiados.

aclError ret = aclrtMemcpy(deviceBuffer, bufferSize, hostBuffer, bufferSize, ACL_MEMCPY_HOST_TO_DEVICE);

Transmissão de dados do dispositivo para o host

Use a função aclrtMemcpy para copiar dados da memória do dispositivo para a memória do host. Esta função precisa especificar o endereço de origem, o endereço de destino e o tamanho dos dados a serem copiados.

aclError ret = aclrtMemcpy(hostBuffer, bufferSize, deviceBuffer, bufferSize, ACL_MEMCPY_DEVICE_TO_HOST);

Por meio dos métodos de gerenciamento de memória e transmissão de dados acima, o AscendCL pode realizar a interação e colaboração de dados entre o host e o dispositivo, completando assim as tarefas de raciocínio dos aplicativos de IA.

Acho que você gosta

Origin blog.csdn.net/weixin_42010722/article/details/130199012
Recomendado
Clasificación