O aprendizado de máquina (ML) está se tornando uma parte cada vez mais importante da pilha de aplicativos modernos. Quer se trate de modelos de linguagem pública de grande escala (LLM), como GPT, ou de modelos privados de pequena escala treinados no conteúdo da empresa, os desenvolvedores precisam encontrar maneiras de incluir esses modelos em seu código.
Isso significa encontrar maneiras de testar esse código, sem enviá-lo para servidores de produção. Podemos desenvolver alguns dos conceitos de MLOps usados para gerenciar os modelos subjacentes, mesclando-os com técnicas devops familiares. No entanto, grande parte desse trabalho é feito sob medida, com os desenvolvedores construindo seus próprios conjuntos de ferramentas e seus próprios equipamentos de teste. À medida que as equipes mudam, a roda é reinventada continuamente.
Como resultado, os projetos demoram mais para serem entregues e as principais lições não são passadas de equipe para equipe. Não existe uma estrutura comum para determinar o desempenho real e os custos de inferência resultantes, o que torna difícil defender o caso de negócios para aplicativos de aprendizado de máquina de nicho, mesmo que eles possam ser capazes de agregar valor significativo a uma empresa.
Usando Flyte para orquestração de ML no Kubernetes
Um caminho para um futuro “ML devops” é usar ferramentas de orquestração de fluxo de trabalho, como Flyte, para construir e executar aplicativos de ML, aproveitando plataformas e contêineres nativos da nuvem para execução em escala. Essa abordagem tem muito valor, pois oferece uma plataforma única para executar inferência, usando tecnologias como Kubernetes para escalar conforme necessário. Mas ele suporta apenas o lado operacional, ao mesmo tempo que exige que os desenvolvedores trabalhem com dados de teste inadequados e com sua própria infraestrutura básica de nuvem.
Flyte aproveita o suporte do Kubernetes para acesso à GPU a partir de contêineres, emparelhando o encapsulamento de modelos de contêiner e suportando código com um pipeline de orquestração Python. O mecanismo de orquestração subjacente é escrito em Go, oferecendo compatibilidade com Kubernetes e o alto desempenho necessário para operações de ML em tempo de execução.
No entanto, fora da caixa, o Flyte ainda tem muitos dos mesmos problemas de outras ferramentas de pipeline, pois exige que os desenvolvedores concluam o desenvolvimento antes que o aplicativo possa ser testado em dados ativos, mesmo quando você está fazendo apenas uma pequena alteração. Como resultado, os testes locais são frequentemente realizados em um conjunto de dados artificial e curadoria, que geralmente é muito menor do que os conjuntos de dados de produção. Os modelos também são limitados para serem executados em laptops ou outros sistemas de desenvolvimento, dificultando a determinação dos níveis de quantização apropriados sem múltiplas passagens.
Flyte é usado por muitas empresas para hospedar seus pipelines de aprendizado de máquina, incluindo a subsidiária da Microsoft no LinkedIn. O LinkedIn passou a usar o Flyte há um ano e logo construiu ferramentas interorganizacionais sobre a estrutura. Isso eliminou alguns gargalos, principalmente ao fornecer aos desenvolvedores um conjunto comum de componentes que reduziu a necessidade de ferramentas personalizadas. No entanto, a equipe do LinkedIn ainda não conseguiu resolver todos os problemas decorrentes da integração do aprendizado de máquina em um ambiente Devops. Uma lacuna importante foi a falta de ferramentas de desenvolvimento interactivas.
Uma experiência de desenvolvedor interativa para Flyte
A equipe de ML do LinkedIn começou a trabalhar em uma ferramenta baseada no servidor de código Visual Studio Code para preencher essa lacuna. Agora disponível como um projeto de código aberto, o FlyteInteractive afasta o desenvolvimento de ML dos atuais processos de desenvolvimento em lote para uma abordagem muito mais próxima do desenvolvimento de aplicativos modernos.
FlyteInteractive é, como o nome sugere, um modo de desenvolvimento interativo para pipelines Flyte. FlyteInteractive permite que os desenvolvedores examinem as operações do modelo e testem diferentes parâmetros enquanto trabalham em um ambiente quase de produção, aproveitando o isolamento fornecido pelos contêineres Kubernetes do Flyte e os recursos de depuração do servidor remoto Visual Studio Code.
Se você estiver usando Flyte e tiver instalado os componentes FlyteInteractive, usar FlyteInteractive é tão fácil quanto adicionar uma única linha à tarefa Python que executa seu trabalho de ML. Essa linha, um decorador @vscode simples, alterna seu pipeline do modo em lote para o modo interativo, implantando um contêiner com um Visual Studio Code Server pronto para uso. Você pode então se conectar ao tempo de execução do contêiner com o VS Code, dando acesso a um trabalho de ML em execução usando as ferramentas de depuração familiares do VS Code.
A vantagem dessa abordagem é que os desenvolvedores podem obter acesso a ambientes de nível de produção e dados reais. Existe ainda a opção de trabalhar com modelos em escala. FlyteInteractive permite que você tenha uma ideia melhor do desempenho e da precisão do modelo e reduza o risco de erro. Ao mesmo tempo, você pode trabalhar para ajustar e quantizar seus modelos, para que eles façam uso eficiente dos recursos e mantenham os custos operacionais no mínimo.
Além disso, o Visual Studio Code oferece acesso a depuradores Python e outras ferramentas específicas de linguagem que podem ajudá-lo a examinar o modelo em execução com mais detalhes. Em vez de esperar pelos resultados de um trabalho em lote, você pode definir pontos de interrupção e usar o depurador para inspecionar as operações, percorrendo e fazendo alterações conforme você avança.
FlyteInteractive também dá acesso a notebooks Jupyter que contêm seu modelo e seu código. Isso lhe dá acesso às ferramentas de análise numérica e visualização do Python para explorar seus dados de teste e entender a precisão do seu modelo e se os resultados obtidos são estatisticamente significativos.
Primeiros passos com FlyteInteractive
Instalar o FlyteInteractive é bastante simples, pois está disponível através do familiar instalador Python pip. Depois de instalar o FlyteInteractive e adicionar o decorador @vscode à sua tarefa, você pode se conectar a ele a partir do Visual Studio Code por meio de uma URL no console do Flyte ou usando a linha de comando do Kubernetes para abrir uma porta no seu pod de teste.
Então tudo que você precisa fazer é usar a opção run and debug no VS Code, aproveitando seu depurador interativo integrado. Uma execução de depuração herda as entradas da tarefa que você criou. Você pode usar isso para fazer alterações em seu modelo rapidamente. Você deve garantir que eles sejam copiados para seu próprio ambiente de desenvolvimento, por exemplo, como commits no Git, pois serão perdidos quando a sessão interativa for encerrada.
Um dos recursos mais úteis do FlyteInteractive é um coletor de lixo integrado. Isso garante que seu ambiente não consuma recursos sem entregar resultados. Uma opção define um tempo máximo de vida, enquanto a outra define limites para o tempo ocioso. Se um dos limites for excedido, o contêiner de teste será encerrado e excluído. Dessa forma, você pode garantir que experimentos fracassados não custem mais do que o necessário.
Versões futuras do FlyteInteractive poderiam fornecer ganchos de observabilidade em modelos que fornecem dados sobre o uso de recursos para ferramentas finops, permitindo que as equipes quantizem modelos para que possam ser adaptados não apenas em termos de desempenho e precisão, mas também de custo. Adicionar recursos de observabilidade pode ajudar no ajuste de desempenho e na depuração de um pipeline de ML como parte de um aplicativo maior.
O LinkedIn estima uma melhoria de 96% na localização de bugs e na execução de experimentos desde que começou a usar o FlyteInteractive. Antes do FlyteInteractive, o ciclo de construção e teste em sistemas ativos podia levar até 15 minutos para testar um fluxo de trabalho, com uma taxa de sucesso de apenas 20% na detecção de bugs.
Se você estiver usando modelos do Hugging Face, especialmente a nova geração de modelos de linguagem pequena, o FlyteInteractive deve ser extremamente útil para obter o nível de quantização correto e a precisão correta para suas aplicações – e não precisa mais ficar sentado esperando para ver se um trabalho em lote terminará conforme o esperado. Ferramentas como FlyteInteractive serão uma parte essencial do conjunto de ferramentas de ML.