Jornada de Pytorch Infra para Rockset


O Pytorch de código aberto executa dezenas de milhares de testes em várias plataformas e compiladores para validar todas as alterações como nosso CI (integração contínua). Rastreamos estatísticas em nosso sistema de IC para poder

  1. Infraestrutura personalizada, como trabalhos de teste dinamicamente de destruição em diferentes máquinas
  2. painéis voltados para desenvolvedores, veja hud.pytorch.orgpara rastrear o verde de todas as mudanças
  3. Métricas, veja hud.pytorch.org/metricspara rastrear a saúde do nosso IC em termos de confiabilidade e tempo até o sinal


Jornada de Pytorch Infra para Rockset

Nossos requisitos para um again -end de dados

Essas estatísticas e painéis de IC atendem a milhares de colaboradores, de empresas como Google, Microsoft e Nvidia, fornecendo informações valiosas sobre o conjunto de testes muito complexo de Pytorch. Consequentemente, precisávamos de um again -end de dados com as seguintes características:

O que usamos antes do Rockset?


Pytorch-Options

Armazenamento interno da Meta (Scuba)

Tl; dr

  • Prós: escalável + rápido para consultar
  • CON: Não está acessível ao público! Não podíamos expor nossas ferramentas e painéis aos usuários, embora os dados que estávamos hospedando não fossem sensíveis.

Como muitos de nós trabalhamos na Meta, o uso de um back-end de dados de recursos já construídos foi a solução, especialmente quando não havia muitos mantenedores de pytorch e definitivamente nenhuma equipe de desenvolvimento dedicada. Com a ajuda da equipe de código aberto da Meta, configuramos pipelines de dados para nossos muitos casos de teste e todos os webhooks do Github que poderíamos nos importar. Scuba Permitimos -nos armazenar o que quisemos (já que nossa escala não é basicamente não comparado à escala do Fb), cortes interativamente e citar os dados em tempo actual (não é necessário aprender SQL!) E exigiu manutenção mínima conosco (já que alguma outra equipe interna estava lutando contra seus incêndios).

Parece um sonho até você se lembrar que Pytorch é uma biblioteca de código aberto! Todos os dados que estávamos coletando não eram sensíveis, mas não poderíamos compartilhá -los com o mundo porque foram hospedados internamente. Nossos painéis de refrigerante foram vistos apenas internamente e as ferramentas que escrevemos sobre esses dados não puderam ser externalizadas.

Por exemplo, nos velhos tempos, quando estávamos tentando rastrear o Home windows “Smoke Assessments” ou casos de teste que parecem mais propensos a falhar apenas no Home windows (e não em qualquer outra plataforma), escrevemos uma consulta interna para representar o definir. A idéia period executar esse subconjunto menor de testes nos trabalhos do Home windows durante o desenvolvimento em solicitações de tração, já que as GPUs do Home windows são caras e queríamos evitar testes de execução que não nos dariam tanto sinal. Como a consulta foi interna, mas os resultados foram usados ​​externamente, criamos a solução hacky de: Jane apenas executará a consulta interna de vez em quando e atualizará manualmente os resultados externamente. Como você pode imaginar, period propenso a erros humanos e inconsistências, pois period fácil fazer alterações externas (como renomear alguns empregos) e esqueça de atualizar a consulta interna que apenas um engenheiro estava olhando.

Jsons comprimidos em um balde S3

Tl; dr

  • Prós: meio escalável + acessível ao público
  • CON: Terreza para consultar + não é realmente escalável!

Um dia, em 2020, decidimos que iríamos relatar publicamente nossos tempos de teste com o objetivo de rastrear o histórico de testes, relatar regressões de tempo de teste e sharding automático. Fomos com o S3, pois period bastante leve escrever e ler, mas, mais importante, period acessível ao público!

Lidamos com o problema de escalabilidade desde o início. Como escrever 10000 documentos para o S3 não period (e ainda não é) uma opção very best (seria tremendous lenta), tínhamos estatísticas de teste agregadas em um JSON, depois comprimimos o JSON e depois o enviou ao S3. Quando precisávamos ler as estatísticas, iríamos na ordem inversa e potencialmente fazemos diferente agregações para nossas várias ferramentas.

De fato, como Sharding foi um caso de uso que só surgiu mais tarde no format desses dados, percebemos alguns meses após a estatística já estar acumulando que deveríamos acompanhar as informações do nome do arquivo de teste. Reescrevemos toda a nossa lógica JSON para acomodar o sharding by Check File – se você quiser ver como foi confuso, confira as definições de classe neste arquivo.


pytorch-stat-v1


pytorch-stat-v2

Versão 1 => Versão 2 (vermelho é o que mudou)

Eu rio levemente hoje que este código nos apoiou nos últimos 2 anos e é ainda apoiando nossa infraestrutura de sharding atual. A risada é apenas leve porque, embora essa solução pareça Jank, funcionou bem para os casos de uso que tínhamos em mente naquela época: sharding por arquivo, categorizando testes lentos e um script para ver o histórico de casos de teste. Tornou -se um problema maior quando começamos a querer mais (surpresa surpresa). Queríamos experimentar os testes de fumaça do Home windows (os mesmos da última seção) e rastreamento de testes escamosos, que exigiam consultas mais complexas em casos de teste em diferentes trabalhos em diferentes commits de mais do que apenas no dia passado. O problema de escalabilidade agora realmente nos atingiu. Lembra-se de toda a descompressão, de-agrega e re-agregando que estava acontecendo para todos os JSON? Teríamos que fazer essa massagem para potencialmente centenas de milhares de Jsons. Portanto, em vez de seguir mais adiante esse caminho, optamos por uma solução diferente que permitiria a consulta mais fácil – Amazon RDS.

Amazon RDS

Tl; dr

  • Prós: escala, acessível ao público, rápido para consultar
  • CON: custos de manutenção mais altos

A Amazon RDS period a solução pure de banco de dados publicamente disponível, pois não sabíamos o rockset na época. Para cobrir nossos requisitos crescentes, colocamos várias semanas de esforço para criar nossa instância do RDS e criamos vários lambdas da AWS para apoiar o banco de dados, aceitando silenciosamente o crescente custo de manutenção. Com o RDS, fomos capazes de começar a hospedar painéis públicos de nossas métricas (como vermelhidão e descamação de teste) em Grafanaque foi uma grande vitória!

Vida com rockset

Provavelmente teríamos continuado com RDS por muitos anos e comediria o custo das operações como uma necessidade, mas um de nossos engenheiros (Michael) decidiu “ir desonesta” e testar Rockset Perto do remaining de 2021. A idéia de “se não estiver quebrada, não conserte”, estava no ar, e a maioria de nós não viu valor imediato nesse empreendimento. Michael insistiu que minimizar o custo de manutenção period essential, especialmente para uma pequena equipe de engenheiros, e ele estava certo! Geralmente, é mais fácil pensar em uma solução aditiva, como “vamos construir mais uma coisa para aliviar essa dor”, mas geralmente é melhor seguir uma solução subtrativa, se disponível, como “Vamos remover a dor!”

Os resultados desse empreendimento ficaram rapidamente evidentes: Michael conseguiu montar o Rockset e replicar os principais componentes do nosso painel anterior em menos de 2 semanas! O Rockset atendeu a todos os nossos requisitos e foi menos doloroso para manter!


pytorch-rockset

Enquanto os três primeiros requisitos foram atendidos consistentemente por outras soluções de back-end de dados, o requisito de “configuração e manutenção de não-opa” foi onde o RockSet ganhou por um deslizamento de terra. Além de ser uma solução totalmente gerenciada e atender aos requisitos que procurávamos em um again -end de dados, o uso do RockSet trouxe vários outros benefícios.

  • Ingestão de esquemas

    • Não precisamos esquematizar os dados com antecedência. Quase todos os nossos dados são JSON e é muito útil poder escrever tudo diretamente no rockset e consultar os dados como estão.
    • Isso aumentou a velocidade do desenvolvimento. Podemos adicionar novos recursos e dados facilmente, sem precisar fazer um trabalho further para tornar tudo consistente.
  • Dados em tempo actual

    • Acabamos se afastando do S3 como nossa fonte de dados e agora usamos o conector nativo do Rockset para sincronizar nossas estatísticas de CI do DynamoDB.

O RockSet provou atender aos nossos requisitos com sua capacidade de escalar, existir como um serviço de nuvem aberto e acessível e consultar grandes conjuntos de dados rapidamente. O add de 10 milhões de documentos a cada hora é agora a norma e vem sem sacrificar os recursos de consulta. Nossas métricas e painéis foram consolidados em um HUD Com um back-end, e agora podemos remover as complexidades desnecessárias do RDS com a AWS Lambdas e servidores auto-hospedados. Conversamos sobre Scuba (interno para meta) mais cedo e descobrimos que o Rockset é muito parecido com o Scuba, mas hospedado na nuvem pública!

O que vem a seguir?

Estamos entusiasmados em aposentar nossa infraestrutura antiga e consolidar ainda mais de nossas ferramentas para usar um again -end de dados comum. Estamos ainda mais empolgados em descobrir quais novas ferramentas poderíamos construir com o RockSet.


Esta postagem de convidado foi de autoria de Jane Xu e Michael Suoque são engenheiros de software program no Fb.



Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *