Transcrição de Audio Distribuído em OCI com Kubernetes + Whisper
Pedro Christo

Pedro Christo @pedrochristo

About: Principal Cloud Engineer @Oracle

Location:
Rio de Janeiro - Brazil
Joined:
Aug 24, 2023

Transcrição de Audio Distribuído em OCI com Kubernetes + Whisper

Publish Date: Mar 19
1 0

Quando falamos de processamento de arquivos em larga escala, enfrentamos desafios bem conhecidos, como custos, gerenciamento de processamento distribuído, escalabilidade e eficiência. Além disso serviços de AI geralmente são cobrados por chamada ou quantidade de dados processado, tornando assim os custos de processamento de uma grande quantidade de dados economicamente inviável.

Para superar esses desafios e trazer uma maior soberania de dados, apresento um exemplo de arquitetura distribuída baseada em Kubernetes, orientada a eventos e alinhada aos princípios Cloud Native.

A proposta dessa arquitetura é transcrever um grande volume de arquivos de áudio, otimizando ao máximo o uso da GPU de forma simples sem a necessidade de frameworks específicos.

Para isso, vamos utilização uma solução orientada a eventos baseada em serviços nativos do OCI para emitir eventos e enfileirar as tarefas de transcrição dos arquivos.

Os códigos em Python e instruções para realizar o deploy estão disponíveis neste repositório no GitHub.

Código

O código, escrito em Python, lê os nomes dos arquivos diretamente do OCI Stream ou OCI Queue paralelamente é feito o download dos arquivos que depois são transcritos.

A transcrição é realizada por meio do Faster Whisper , utilizando o modelo large-v3. Os resultados são salvos em um Object Storage de saída.

Esse código é executado no OKE (Oracle Kubernetes Engine) , com as permissões necessárias para ler e escrever arquivos no Object Storage.

Fluxo da Arquitetura

Ilustração da Arquitetura

  1. Um arquivo de áudio é carregado em um bucket de entrada na Oracle Cloud.
  2. Esse bucket emite um evento de criação de arquivo.
  3. O serviço OCI Events captura esse evento e inicia uma ação.
  4. A ação pode ser o envio do evento para um OCI Stream ou a inicialização de uma função para enviar o evento para o OCI Queue.
  5. Um pod no OKE lê os eventos do Stream ou Queue e inicia o processo de transcrição de cada áudio.
  6. As transcrições resultantes são salvas em um bucket de saída.

Porque Kubernetes?

O Kubernetes é a plataforma de gerenciamento e execução de contêineres mais amplamente utilizada no mundo. Além disso, é uma das ferramentas fundamentais para projetos Cloud Native, sendo gerenciada pelo CNCF (Cloud Native Computing Foundation).

Kubernetes oferece resiliência e escalabilidade nativas. Caso ocorra alguma falha no nível de nó ou contêiner, novos recursos são criados automaticamente para garantir a continuidade do workload.

Neste caso específico, utilizamos o OKE (Oracle Kubernetes Engine) com Managed Nodes e um cluster configurado com GPU A10.1. Este modelo de GPU disponibiliza apenas um chip gráfico, sem suporte ao MIG (Multi-Instance GPU). No entanto, isso não impede a criação de paralelismo a nível de contêiner.

Otimização do uso de GPU

Como mencionado, a arquitetura utiliza um modelo de GPU com apenas um chip, sem suporte ao MIG. Portanto, o paralelismo deve ser implementado no nível de código.

Para resolver esse problema, o PyTorch Cuda Stream cai como uma luva. Permitindo o processamento paralelo de vários arquivos com apenas um carregamento de modelo da GPU.

A GPU A10.1 possui 24 GB de memória. O modelo Faster Whisper large-v3 , com precisão de float16, consome entre 3 e 7 GB de VRAM durante a inferência, dependendo do tamanho do arquivo processado. Com base nisso, é possível processar até três arquivos simultaneamente, com uma perda de desempenho aceitável no tempo de processamento nos picos de utilização.

Testes e Resultados

Os testes foram feitos processando o mesmo arquivo de 11 minutos, foram processados 20 arquivos iguais em cada cenário de teste dividido em 3 cenários diferentes. 1 arquivo por vez e série; 2 arquivos por vez em paralelo e 3 arquivos por vez em paralelo.

Conseguindo os seguintes resultados:

Arquivos em Paralelo Tempo medio em Segundos
1 9,988s
2 15s
3 18.104s

Conclusão

Com essa abordagem, conseguimos maximizar o uso da GPU, garantir alta escalabilidade e manter uma arquitetura resiliente e eficiente para processamento de arquivos em larga escala. Além disso simplifica por usar ferramentas nativas da Oracle Cloud sem a necessidade de Frameworks específicos de AI para processamento distribuído.

Comments 0 total

    Add comment