Em 2019, três departamentos diferentes estabeleceram a meta de lançar novas instâncias do Linode GPU para os clientes até o aniversário da Linode. Entre as equipes de hardware, marketing e gerenciamento, não tínhamos certeza se isso seria possível, especialmente com os outros produtos em que estávamos trabalhando durante esse período.
Então, escolhemos a única equipe que tinha chance de fazer isso acontecer: uma equipe escolhida a dedo de funcionários ansiosos, abrangendo vários departamentos, para formar a Team Mission GPU. Agora, quase dois anos atrás e muitas implementações de instâncias do GPU depois, estamos fazendo uma viagem pela memória para fornecer informações detalhadas sobre como fizemos isso acontecer - e transformamos uma ideia em um produto bem-sucedido que estamos expandindo ativamente.
Um breve histórico sobre a história da Virtualização na Linode
Antes de começarmos a falar sobre como lançamos as instâncias do GPU , aqui estão alguns detalhes técnicos leves e a história de como a virtualização começou na Linode antes de nos tornarmos o provedor de nuvem que você conhece hoje.
Linode começou como uma pequena empresa em 2003 fornecendo máquinas virtuais rodando UML (User Mode Linux), um antigo paradigma de virtualização semelhante ao Qemu (Quick EMUlator). UML fornecia hardware totalmente virtualizado. Quando um cliente entrava em seu Linode, os dispositivos que um cliente via, como discos, rede, placa-mãe, RAM, etc., pareciam e se comportavam como dispositivos de hardware reais, mas os dispositivos eram realmente apoiados por software ao invés do hardware real.
Vários anos depois, Linode mudou-se para Xen como sua camada de virtualização para fornecer as últimas melhorias de desempenho a nossos clientes. Xen é um hipervisor de tipo1, ou seja, o hipervisor roda diretamente no hardware, e os convidados rodam em cima do kernel Xen . O kernel Xen fornece paravirtualização a seus convidados, ou as interfaces de hardware que o Linode vê são traduzidas para chamadas de máquina reais através do kernel Xen e retornadas ao usuário. A razão pela qual esta camada de tradução existe é fornecer segurança e outros recursos de segurança para que a instrução correta vá para o Linode correto.
Vários anos depois disso, uma nova tecnologia estava sendo desenvolvida chamada KVM (Kernel Virtual Machine). KVM consiste de partes do kernel Linux que fornecem interfaces paravirtuais às instruções da CPU. Qemu é uma das tecnologias de virtualização que podem aproveitar KVM. Linode decidiu mudar novamente para o benefício de nossos clientes. Quando os clientes levaram a atualização gratuita para KVM , a maioria das cargas de trabalho viu um aumento instantâneo no desempenho. Este tipo de paravirtualização é diferente de Xen: as instruções da CPU passam do hóspede (Qemu) para o kernel do host e diretamente para a CPU usando as instruções de nível de processador, permitindo velocidades de execução quase nativas. Os resultados dessas instruções são devolvidos ao Linode que as emitiu, sem a sobrecarga que Xen requer.
Então, o que tudo isso tem a ver com as instâncias do Linode GPU ?
A Linode realizou uma pesquisa de mercado e tentou determinar o que ofereceria o melhor valor para os clientes interessados em executar cargas de trabalho do GPU . Decidimos fornecer as GPUs diretamente aos clientes usando uma tecnologia chamada "host passthrough". Informamos ao Qemu qual dispositivo de hardware gostaríamos de passar para o convidado, nesse caso, a placa GPU , e o Qemu trabalha em conjunto com o Linux para isolar a placa GPU de modo que nenhum outro processo no sistema possa usá-la. A máquina Linux host não pode usá-la, os outros Linodes na máquina também não podem usá-la. Somente o cliente que o solicitou pode usar o cartão GPU , e ele recebe o cartão completo. O dispositivo de hardware real é transmitido, inalterado e não paravirtualizado, o que significa que não há camada de tradução.
Semana 1: O Hardware chega a Linode
Com a pesquisa concluída, toda a equipe decidiu avançar com o projeto. Para que o plano pudesse funcionar, o sistema exigiu algumas mudanças em toda a pilha de baixo nível. O hardware entrou on-line na segunda-feira e tivemos cinco dias para decidir se avançaríamos ou não com um grande pedido de um datacenter para cumprir o prazo.
Todos os envolvidos tinham o mesmo entendimento, se não conseguíssemos que funcionasse em uma semana regular de 40 horas de trabalho, não avançaríamos. Isto significava que não havia pressão para fazer horas extras, mas só tínhamos cinco dias para determinar o futuro de um novo produto Linode.
Então, o que acabou acontecendo? Acontece que todas as nossas pesquisas deram frutos. Tentamos seguir alguma documentação existente, e funcionou exatamente como esperado. Em poucos dias, fomos capazes de anexar de forma confiável GPUs a Linodes em um ambiente de teste. Na sexta-feira, estávamos confiantes de que poderíamos conseguir isso. O teste foi um sucesso! Agora era hora de fazer uma grande encomenda para os clientes e seguir em frente.
Semana 2: Faça a camada de interface de hardware funcionar com GPUs
Depois de um teste inicial bem-sucedido, chegamos ao escritório na segunda-feira recarregados e prontos para integrar o processo de anexação do GPU aos nossos fluxos de trabalho de criação de Linode existentes. Tentamos tornar nossa interface o mais simples possível: apenas alguns cliques para implantar um Linode, e muitas coisas são incluídas nessas poucas ações que tivemos que levar em conta.
Para tornar as GPUs possíveis, várias partes de baixo nível tiveram que ser escritas e implementadas, como isolar a RAM para o GPU e o Linode, além de fornecer ao Linode núcleos de CPU dedicados que foram emparelhados com a RAM isolada e o GPU. Pesquisamos a arquitetura NUMA (Non Uniform Memory Access, acesso não uniforme à memória) da placa-mãe e conseguimos isolar o grupo NUMA de RAM para a CPU com a qual estava mais intimamente associado e o grupo NUMA que estava conectado à pista PCIe (PCI [Peripheral Computer Interface] express) à qual o GPU estava conectado. Isso nos permitiu inicializar um Linode com 1, 2, 3 ou 4 GPUs conectadas e ocupar a parte da RAM e os núcleos da CPU que estavam intimamente associados à placa GPU com base na estrutura da placa-mãe.
Depois que a camada de hardware foi concluída, trabalhamos na interface com os mecanismos de enfileiramento de trabalhos do Linode para que pudéssemos inicializar os Linodes por meio de nosso Cloud Manager e API. Nesse estágio, pudemos começar a testar a confiabilidade. A última coisa que queríamos era que um engenheiro de plantão fosse chamado no meio da noite por causa de uma falha no sistema, ou que um sistema caísse no meio do dia de trabalho para um cliente em um fuso horário diferente. Com os horários de sono dos clientes e dos engenheiros em mente, começamos a testar cedo e continuamos a garantir que os clientes recebessem um produto sólido e confiável.
Semana 3: Fazer alterações na interface do administrador e na contabilidade
Na terceira semana, tínhamos algumas questões administrativas à nossa frente: como rastreamos quais clientes são atribuídos a quais Linodes? Como enviamos os clientes para uma instância de Linode com um GPU e não para uma instância de Linode sem um GPU?
Todo o rastreamento e controle tiveram de ser implementados. Fizemos isso para que pudéssemos contabilizar quantos cartões GPU tínhamos, quantos foram retirados, quantos estavam vazios e quantos ainda poderíamos vender a novos clientes. Também tivemos de criar esse rastreamento GPU em nossas interfaces internas de administrador. Isso pode parecer um trabalho de contabilidade enfadonho, mas foi necessária muita engenhosidade de toda a equipe e de membros externos da equipe para fazer a interface desse novo produto com todos os nossos produtos existentes, sem exigir etapas manuais.
Felizmente, reunimos todos e conseguimos escrever o código e testá-lo para garantir que funcionasse bem, fosse confiável e não exigisse intervenção manual para colocar uma instância do Linode GPU em funcionamento. Outro benefício colateral de fazer esse trabalho nesse estágio foi que os testes ficaram mais fáceis. Bastava clicar em um único botão em nossa interface de administrador para abrir uma instância do Linode GPU .
Semana 4: Tornar públicas API Mudanças para que os clientes possam criar Linodes
Depois de criar o botão da interface do administrador para abrir uma instância do Linode GPU , estávamos nos sentindo muito bem. Agora, precisávamos trabalhar para expor essa mesma funcionalidade aos clientes. O API público é apoiado pelo Python, o que tornou o código extremamente intuitivo. Conseguimos implementar as alterações e testá-las muito rapidamente. A parte complicada foi disponibilizar esse recurso dentro da empresa para testes, mas não fora da empresa até que tivéssemos feito os testes necessários para fins de confiabilidade.
Semana 5: Implantar! Ou, Como implantar uma característica voltada para o público por trás de uma bandeira de característica
Estávamos chegando ao arame, então fizemos a pergunta: como estamos nos sentindo ao lançar este serviço ao público e, em última análise, fazer com que os clientes utilizem este novo serviço?
A resposta foi lidar com todas as incógnitas desde o início e levá-las em conta por meio da implementação antecipada e frequente. Enquanto ainda estávamos testando alguns dos casos de uso na equipe, implantamos instâncias do Linode GPU para o público, mas escondidas atrás de um sinalizador de recurso. Pudemos testar as GPUs em nossas contas de funcionários e isso nos permitiu garantir que as coisas se comportariam exatamente como esperado se um cliente as usasse. Sempre que encontrávamos algo que não esperávamos, fazíamos uma correção e fazíamos uma implementação pública.
Lentamente, mas seguramente, e implantando código quase todos os dias, resolvemos tudo o que estava em nossa lista. Ficamos sem mudanças para fazer e nos sentimos confiantes na verdadeira abertura para os clientes.
Semana 6: Teste! GPUs abertas para os funcionários da Linode
Uma das melhores coisas de trabalhar na Linode é que podemos brincar com tecnologia de ponta antes de qualquer outra pessoa. (P.S.: estamos contratando!) Todo funcionário tem a chance de testar um novo produto, de modo que cada peça de tecnologia que lançamos tenha sido testada em batalha. Qualquer funcionário pode se inscrever para testar uma instância do Linode GPU durante o horário de trabalho, mesmo depois do expediente, se realmente quiser, para usar a instância do Linode GPU como um cliente faria. Tudo o que eles precisavam fazer era marcar sua conta de funcionário e criar uma instância GPU.
Aqui estão algumas das maneiras como os Linodians experimentaram nossas novas GPUs:
- Jogos na nuvem - onde o jogo é executado na instância do Linode GPU e o vídeo e os controles são enviados via Steam Link™
- renderização 3D
- Transcodificação de vídeo
- Teste da força da senha
- TensorFlow em funcionamento
Após esta etapa, coletamos métricas de desempenho e decidimos que estávamos prontos para ir para a produção e lançamento aos clientes.
Lançamento!
Nós lançamos! Celebramos! Havia sorvete e swag! Os clientes começaram a experimentar o produto que estava em desenvolvimento há apenas algumas semanas. A melhor parte foi que tudo funcionou no dia do lançamento. Não tivemos que fazer nenhuma mudança de última hora, não houve incêndios para apagar, os clientes estavam felizes e tudo funcionou de forma confiável.
O lançamento real do código não foi difícil. Da perspectiva do código e da configuração do sistema, tudo o que foi necessário para lançar GPUs na produção foi a remoção de uma bandeira de recurso. Mas também há toneladas de outras coisas que vão para o lançamento de um produto na Linode: documentação técnica, fazendo as mudanças de IU no Linode Cloud Manager, e todos os divertidos materiais de marketing para ajudar a celebrar nosso novo produto.
Pós-lançamento: Sem mudanças de código por seis meses
Algumas perguntas estão sempre em nossa mente: fizemos testes suficientes? Seis semanas foi rápido demais?
Em nosso caso foi a velocidade certa: não tive que tocar no código desde o lançamento. E, as GPUs Linode têm visto o uso do cliente todos os dias. É ótimo quando você pode construir um produto e tê-lo funcionando, e depois continuar e construir outros grandes produtos, e aquela coisa que você construiu há dois anos ainda está funcionando, tudo por si só, com o mínimo de interação necessária
Em retrospectiva, aqui estão algumas coisas que nos permitiram ser tão bem sucedidos:
- Fazer pesquisa antes do tempo - Isto nos ajudou muito a enfrentar todas as incógnitas que podíamos sem realmente ter hardware em mãos.
- Fazer um plano - Tínhamos um plano muito detalhado e cada passo tinha que ser executado a tempo ou não teríamos sido capazes de lançar.
- Siga o plano - Concentre-se na tarefa em mãos e tenha em mente as tarefas restantes que precisam ser feitas.
- Tenha uma boa equipe de gerenciamento - Certifique-se de que todos os níveis de gerenciamento tenham o entendimento de que se um projeto com um prazo apertado falhar uma etapa, o prazo de lançamento não será cumprido. Esta pode ser a parte mais importante que nos permitiu ter sucesso. Alguma pressão é uma coisa boa, como foi no nosso caso, muita pressão leva ao esgotamento e ao fracasso. Depois de discutir a linha do tempo com a gerência, eles estavam completamente a bordo.
- Apoiar uns aos outros - A única equipe que teve uma chance não teria tido uma chance sem toda a estrutura de apoio do resto da organização. Quando todos os seus colegas de trabalho quiserem que você seja bem sucedido, todos eles entrarão e ajudarão se você precisar deles.
- Teste - Teste teste teste teste, se eu pudesse digitar mais uma vez, eu ainda diria teste. Tanto o teste automático como o manual. Esta foi, de longe, a principal razão pela qual ninguém da minha equipe teve que tocar no código em mais de 6 meses.
Saiba mais sobre as instâncias do Linode GPU consultando nossa documentaçãoGPU . Acabamos de expandir a disponibilidade do GPU em nossos data centers de Newark, Mumbai e Cingapura.
Interessado em experimentar as GPUs Linode para suas cargas de trabalho atuais? Você pode obter um teste gratuito de uma semana para ver como nossas GPUs funcionam para você. Saiba mais aqui.
(E novamente, se você quiser nos ajudar a construir e testar produtos como GPUs Linode, estamos contratando!)
Comentários (1)
how to make windows os in linode