Desenvolvimento Moderno de Aplicativos - Aprendizagem de Máquina e Inteligência Artificial
Os kits de ferramentas modernos de machine learning são de código aberto e gravados no Python. Como tal, uma plataforma de machine learning deve fornecer suporte nativo para estruturas de código aberto e Python. Ele também deve permitir que os usuários personalizem seus ambientes de aprendizado de máquina, instalando suas próprias bibliotecas ou atualizando as já instaladas. A plataforma deve permitir que os cientistas de dados treinem seus modelos em dados estruturados, não estruturados ou semiestruturados, enquanto dimensionam as etapas de extração, transformação e carregamento (ETL) ou treinamento verticalmente ou horizontalmente em vários recursos de computação.
Finalmente, uma plataforma de machine learning deve garantir que os modelos possam ser facilmente implantados para consumo em tempo real com o mínimo de atrito (idealmente por meio de uma simples chamada REST), preservando a linhagem do modelo implantado para garantir que ele possa ser auditado e reproduzido.
Este documento apresenta os princípios de design associados à criação de uma plataforma de aprendizado de máquina e um caminho de implementação ideal. Use esse padrão para criar plataformas de aprendizagem de máquina que atendam às necessidades dos usuários de cientistas de dados.
Princípios de Design
Essa arquitetura implementa os princípios modernos de desenvolvimento de aplicativos das seguintes maneiras:
- Princípio: Usar estruturas de código aberto leves e linguagens de programação maduras
Use ambientes conda, em vez de ambientes virtuais Python ou imagens Docker. Fornecemos ambientes curados do Data Science que contêm uma coleção de bibliotecas Python selecionadas para tratar um caso de uso específico. Os ambientes Conda normalmente fornecem o nível certo de isolamento no Python, oferecem flexibilidade permitindo que vários ambientes sejam executados no mesmo ambiente de notebook ou em lotes, e são mais fáceis de criar do que as imagens do Docker. Os ambientes Conda também são fáceis de exportar e importar porque são arquivos simples (gzip e zip).
Comece com nosso conjunto pronto para usar de ambientes conda. Esses ambientes são atualizados regularmente para garantir que os pacotes que eles contêm reflitam a versão mais recente disponível. Cada ambiente vem com exemplos de documentação e código. Os ambientes podem ser usados para criação, treinamento e implantação de modelos de machine learning no Python 3.6 e posterior. Adote esses ambientes para garantir a compatibilidade entre diferentes componentes da arquitetura.
- Princípio: Crie aplicativos como serviços que se comunicam por meio de APIs
Adote o recurso de implantação de modelo do Data Science, que implanta um modelo do catálogo de modelos como um ponto final HTTP escalável que outros aplicativos podem consumir. Garantir que o ambiente de treinamento do modelo contenha as mesmas dependências de terceiros que o ambiente de implantação possa ser um desafio. As implantações de modelo do Data Science enfrentam esse desafio, extraindo o ambiente conda correto para executar seu modelo por trás do ponto final HTTP. As implantações de modelo também fornecem autenticação e autorização do Oracle Cloud Infrastructure (OCI) Identity and Access Management (IAM), de modo que você não precise criar e configurar seu próprio usuário e protocolo de gerenciamento de acesso.
Uma alternativa aceitável é a implantação de modelos de machine learning por meio do Oracle Functions, que podem ser usados como backend no API Gateway. Esta opção fornece flexibilidade, especialmente ao definir a API ou usar um protocolo de autorização diferente, como OAuth ou autenticação básica. No entanto, isso exige mais trabalho para você, é menos automatizado e é mais propenso a erro do usuário. O Oracle Functions requer que você crie sua própria imagem do Docker e certifique-se de que todas as dependências necessárias e a versão de runtime do Python correspondam ao ambiente de treinamento. A maioria das equipes de ciência de dados deve evitar essa opção.
- Princípio: Automatize a criação, o teste e a implementação
DevOps é para o desenvolvimento de software o que MLOps é para o aprendizado de máquina: uma série de processos e automação centralizados na criação, teste, avaliação, implantação e monitoramento de modelos em produção. Favor usar padrões reproduzíveis, auditáveis e reproduzíveis por meio de jobs e implantações de modelos no Data Science. Evite o treinamento e a implantação de modelos diretamente de uma sessão de notebook onde é mais difícil criar, executar e automatizar testes. Certifique-se de que todo o código para preparar os dados, treine o modelo e defina os testes seja controlado por versão. Execute pipelines de criação e implantação por meio do serviço OCI DevOps ou diretamente de jobs no Data Science. Execute a série de testes de introspecção do modelo que estão incluídos no código boilerplate do artefato do catálogo de modelos. Quando executados com sucesso, esses testes minimizam o número de erros que ocorrem quando o modelo é implantado para produção.
- Princípio: Use serviços totalmente gerenciados para eliminar a complexidade no desenvolvimento de aplicativos, runtimes e gerenciamento de dados
Se um cientista de dados documenta seus ativos de dados por meio do OCI Data Catalog, executa tarefas de processamento de dados em larga escala com OCI Data Flow ou cria, treina e implanta modelos de aprendizado de máquina por meio do Data Science. Todas essas soluções são totalmente gerenciadas. Cuidamos do provisionamento, da aplicação de patches e da proteção desses ambientes para você. Uma solução totalmente gerenciada reduz significativamente a carga operacional das equipes de cientistas de dados, cujas metas são treinar e implantar modelos, não gerenciar a infraestrutura. Uma boa plataforma de aprendizado de máquina fornece várias ofertas de infraestrutura (CPUs, GPUs, formas flexíveis) sem necessidade de configuração adicional.
- Princípio: Monitoramento e rastreamento completos do instrumento
Todas as cargas de trabalho devem ter métricas básicas de saúde emitidas por meio do serviço OCI Monitoring. Os usuários podem definir limites de métricas personalizados para alertas e ser notificados ou agir quando um determinado limite for atingido. Isso permite que eles monitorem a integridade operacional de seus jobs, sessões de notebook ou implantações de modelo.
Permita que os usuários emitam logs personalizados para o serviço de Log do OCI de jobs e implantações de modelo. Na maioria dos casos, os cientistas de dados também desejam monitorar os processos em execução em jobs (por exemplo, iteração de treinamento ou pontuação de validação off-line) ou capturar vetores de recursos ou previsões de modelo de uma implantação de modelo. Este é um padrão comum. Certifique-se de que eles possam acessar o serviço OCI Logging e executar uma análise exploratória simples por meio do serviço OCI Logging Analytics.
- Princípio: Implemente uma abordagem de defesa em profundidade para proteger aplicativos e dados
Uma boa plataforma de aprendizado de máquina limita o acesso dos cientistas de dados apenas aos recursos necessários para fazer seu trabalho. Siga o princípio do privilégio mínimo em grupos de cientistas de dados. Além disso, use diretores de recursos em relação aos princípios do usuário para autenticar ou autorizar outros recursos. Esta prática impede que os usuários insiram suas credenciais principais de usuário dentro de sessões ou jobs de notebook.
Certifique-se de que todos os usuários tenham acesso ao OCI Vault e que suas credenciais para acessar fontes de dados de terceiros sejam armazenadas e criptografadas no Vault. As sessões de notebook em particular devem estar acessíveis apenas aos usuários que as criaram; configure as políticas de acesso para conceder acesso a sessões de notebook e jobs apenas ao criador desses recursos. Esta prática impede que vários usuários acessem o mesmo ambiente de notebook, compartilhem chaves privadas e substituam a mesma parte de código. Limite o acesso de saída à internet pública sempre que fizer sentido. Configure e selecione VNICs secundárias (rede virtual na nuvem e seleção de sub-rede) para iniciar sessões e jobs de notebook e impedir que os usuários façam download de conjuntos de dados ou bibliotecas de sites não protegidos.
Arquitetura
Você pode implementar os princípios de design usando uma implantação com base nessa arquitetura opinativa.
Descrição da ilustração maf_ai_ml_design_pattern.png
A arquitetura tem os seguintes componentes:
- Serviço de Integração de Dados
O Oracle Cloud Infrastructure Data Integration é um serviço de nuvem nativo, multitenant, sem servidor e totalmente gerenciado que ajuda você a executar tarefas de ETL comuns, como a ingestão de dados de diferentes fontes, limpeza, transformação e remodelação desses dados e o carregamento eficiente desses dados para origens de dados de destino no OCI.
A ingestão de dados de várias fontes (por exemplo, Amazon Redshift, Azure SQL Database e Amazon S3) no Object Storage e Autonomous Data Warehouse é a primeira etapa desse processo.
- Armazenamento de Objetos e Autonomous Database
O Object Storage e o Autonomous Data Warehouse fornecem a camada de armazenamento para os dados históricos usados para treinar os modelos de aprendizado de máquina. O Object Storage pode ser usado como camada de armazenamento de dados de origem e de destino para executar jobs ETL e de processamento de dados personalizados usando o serviço Data Flow.
- OCI Data Catalog
Um data lake que consiste em várias tabelas no Autonomous Data Warehouse, buckets no Object Storage e milhares de ativos de dados torna-se insatisfatório rapidamente. Para os cientistas de dados, o problema é uma das descobertas. Eles não são DBAs e ainda precisam identificar rapidamente quais ativos de dados são relevantes para solucionar um determinado problema de negócios. O Oracle Cloud Infrastructure Data Catalog permite que os cientistas de dados identifiquem rapidamente ativos de dados candidatos para o treinamento de modelos de machine learning.
O serviço Data Catalog é uma solução de governança e descoberta de dados de autoatendimento totalmente gerenciada para dados empresariais. Ele fornece um único ambiente colaborativo para gerenciar metadados técnicos, de negócios e operacionais. Você pode coletar, organizar, localizar, acessar, entender, enriquecer e ativar esses metadados.
- Serviço OCI Data Flow
Antes de os dados estarem prontos para o treinamento de máquina, várias operações de "wrangling" de dados precisam ser aplicadas, em escala, nos dados brutos em Object Storage ou Autonomous Data Warehouse. Os cientistas de dados precisam que os dados sejam limpos, unidos, desnormalizados, deduplicados, imputados, escalados e formatados em um formato adequado para treinamento de modelo (geralmente um quadro de dados). Essa etapa normalmente é feita por engenheiros de dados, mas mais cientistas de dados estão envolvidos nessa etapa. O kit de ferramentas de fato para executar essas etapas é o Apache Spark e recomendamos o uso do Oracle Cloud Infrastructure Data Flow.
O Data Flow é um serviço totalmente gerenciado para executar aplicativos Spark. Ele permite que você se concentre nos seus aplicativos e oferece um ambiente de tempo de execução fácil para executá-los. Ele tem uma interface de usuário fácil e simples com suporte à API para integração com aplicativos e workflows. Não é necessário gastar tempo na infraestrutura subjacente, no provisionamento de cluster ou na instalação de software.
- OCI Data Science
O Oracle Cloud Infrastructure Data Science é uma plataforma totalmente gerenciada que as equipes de ciência de dados podem usar para criar, treinar, gerenciar e implantar seus modelos de aprendizado de máquina no OCI. O Data Science inclui sessões de notebook, jobs, um catálogo de modelos, implantações de modelos e o SDK Python do Accelerated Data Science (ADS). Os dados podem ser ingeridos em sessões de notebook ou jobs de várias origens de dados e transformados em recursos preditivos para treinamento de modelos. As sessões de notebook são IDEs em que os cientistas de dados podem criar protótipos do pipeline de transformações necessárias para desenvolver recursos e treinar o modelo. Essas etapas podem ser produzidas em escala com tarefas. Depois que os modelos são treinados, eles são armazenados em uma camada de armazenamento de modelo gerenciado (catálogo de modelos) e preparados para implantação. Os modelos podem ser implantados como pontos finais HTTP por meio de implantações de modelo. Após sua implantação, os modelos podem ser consumidos por aplicativos de terceiros, quer esses aplicativos estejam hospedados no OCI ou em outro lugar.
- Oracle Machine Learning
O Oracle Machine Learning também oferece recursos para criar, treinar e implantar modelos de dados no banco de dados. O Oracle Machine Learning fornece uma interface de notebook Zeppelin que permite que os cientistas de dados treinem modelos usando a biblioteca de cliente Python OML4Py. O OML também oferece uma abordagem sem código para treinamento de modelo com a interface de usuário AutoML. A implantação de modelos como APIs REST pode ser feita por meio do Oracle Machine Learning Services. No entanto, há suporte limitado para software de código aberto.
- Serviços de IA
Os serviços de IA fornecem um conjunto de APIs de modelo pré-treinadas e personalizáveis em casos de uso que vão desde linguagem, visão, fala, decisão e previsão. Os serviços AI fornecem previsões de modelo que são acessíveis por meio de pontos finais de API REST. Esses serviços fornecem modelos pré-treinados de última geração e devem ser considerados e avaliados antes do treinamento de modelos personalizados de machine learning usando os serviços 1-6. Como alternativa, os serviços do Oracle Machine Learning também fornecem uma série de modelos predefinidos de linguagem (tópico, palavras-chave, resumo, similaridade) e visão.
Considerações
Ao implementar o machine learning e a inteligência artificial, considere essas opções.
- Ofereça escalabilidade horizontal em cada etapa do ciclo de vida de desenvolvimento de modelos
Forneça escalabilidade horizontal para as etapas de ETL e processamento de dados (por meio do OCI Data Flow), o treinamento do modelo em si e a implantação do modelo. Além disso, considere o uso de GPUs no lado do treinamento do modelo e no lado da implantação.
- Garanta a reprodutibilidade do modelo
Os modelos são auditados e precisam ser reproduzidos. A reprodução de um modelo requer que as referências ao código-fonte, aos conjuntos de dados de treinamento e validação e ao ambiente (bibliotecas e arquitetura de terceiros) sejam fornecidas quando um modelo é salvo. Use referências para repositórios Git e hashes de commit para rastrear o código. Use o Object Storage para salvar instantâneos dos conjuntos de dados de treinamento e validação. Inclua uma referência a um ambiente conda publicado como parte dos metadados do modelo.
- Código de controle de versão, recursos e modelos
Essa consideração está relacionada à reprodutibilidade do modelo. Você pode executar modelos de versão diretamente no catálogo de modelos do Data Science. Integre o uso do Git como parte de um IDE do Data Science (por exemplo, JupyterLab) ou em um mecanismo de execução de treinamento como jobs do Data Science. Você pode definir recursos de versão como conjuntos de dados por meio de uma ferramenta como Armazenamento de Objetos ou Git Large File Storage (LFS), que suporta controle de versão do objeto por padrão.
- Empacotar, compartilhar e reutilizar dependências de tempo de execução de terceiros
Reutilize os mesmos ambientes conda em notebooks, jobs e implantações de modelo. Isso também minimiza o risco de não correspondência de dependência de terceiros entre essas etapas.
- Seja independente da origem de dados, limitando as transferências de dados
Transferir dados para um ambiente de treinamento de modelo é demorado. Use volumes em blocos que podem ser compartilhados entre ambientes de notebook ou jobs de treinamento o mais possível. Mantenha instantâneos de conjunto de dados locais para fins de treinamento e validação de modelos.
Padrões Alternativos
- Implantando uma VM de Ciência de Dados do OCI Marketplace como uma alternativa ao serviço de Ciência de Dados gerenciado
A imagem da VM do Data Science está disponível para as famílias de forma da CPU e da GPU NVIDIA. O ambiente oferece uma série abrangente de bibliotecas e IDEs de aprendizado de máquina que podem ser usados por cientistas de dados. No entanto, ele não fornece recursos de implantação de modelos. A implantação do modelo pode ser obtida por meio da Implantação do Modelo de Ciência de Dados do OCI ou pelo Oracle Functions.
- Oracle Machine Learning (OML Notebooks, AutoML UI, Serviços, OML4Py) no banco de dados para criar, treinar e implantar modelos de aprendizado de máquina no banco de dados
Esse padrão alternativo fornece recursos avançados quando os dados necessários para treinar o modelo estão no banco de dados. Esse padrão tem limitações no suporte de software de código-fonte aberto de aprendizado de máquina.
- Implantação de modelos como APIs REST por meio do Registro do OCI, do Oracle Functions e do Gateway de API
Esse padrão é aplicável aos clientes que estão treinando seus modelos no ambiente de imagem VM do Data Science ou por meio do OCI Data Science. Esse padrão fornece um caminho alternativo para a implantação de modelos de aprendizado de máquina como pontos finais de API REST. Uma imagem do Docker com o artefato de modelo treinado deve ser criada e implantada no Registro do OCI, uma Função Oracle pode ser criada com base na imagem do docker e implantada como um recurso de backend do Gateway de API.
- Implantação da plataforma de AM Kubeflow do OSS no OKE
Esse padrão oferece uma solução independente e dá ao cliente a opção de executar cargas de trabalho de aprendizado de máquina baseado em contêiner no Oracle Container Engine for Kubernetes. Kubeflow é uma oferta do OSS que oferece todos os principais recursos de uma plataforma de aprendizado de máquina.
Antipattern
Não recomendamos uma frota de VMs criadas com uma pilha OSS de aprendizado de máquina personalizada. Os projetos de aprendizado de máquina são normalmente construídos sobre várias bibliotecas do OSS que têm dependências complexas e muitas vezes conflitantes e vulnerabilidades de segurança que exigem upgrades de pacotes constantes. Recomendamos serviços gerenciados que sobrecarregam a criação de ambientes prontos para uso e seguros.