Apps de IA em um instante: publique em GPUs sem Docker — Dean Quiñanola, Runpod
Autoria: AI Engineer · Assistir no YouTube
Vídeo de autoria do canal indicado, não da IANIA; todos os direitos pertencem ao criador. Transcrição, resumo e tradução gerados automaticamente; o conteúdo no idioma original é preservado na versão em idioma original.
Idioma original: inglês
Vídeo original: AI Apps in a Flash: Ship to GPUs Without Docker — Dean Quiñanola, Runpod · Canal: AI Engineer · 13:54 · Assistir no YouTube
Tópicos: Engenharia de software com IA, Ferramentas de desenvolvimento com IA, Infraestrutura e hardware de IA
Dean Quiñanola, engenheiro da RunPod, apresenta o Flash como uma forma de desenvolver e publicar aplicações de IA em GPUs sem precisar configurar Docker. A ferramenta permite testar alterações rapidamente, instalar dependências durante a execução e chamar funções hospedadas em endpoints diferentes como se fossem locais. Na demonstração, ele cria endpoints para consultar informações da GPU, gerar texto e gerar imagens, e depois publica uma aplicação pela CLI. Ao final, mostra um projeto de hackathon e explica como começar a usar o Flash.
Pontos-chave
Seção intitulada “Pontos-chave”- O Flash busca reduzir o ciclo de desenvolvimento que envolve reconstruir e reenviar imagens Docker a cada alteração.
- Com o comando de desenvolvimento local, é possível testar código que executa em um endpoint serverless com GPU.
- As dependências Python podem ser instaladas durante a execução, e os logs ajudam a acompanhar o estado do endpoint.
- O Flash oferece comunicação entre endpoints, além de anexos de volumes de rede com cache aquecido.
- A demonstração percorre exemplos de consulta à GPU, geração de texto e geração de imagens.
- O comando de publicação empacota a aplicação e a envia aos servidores da RunPod sem exigir Docker.
- Um projeto de hackathon usou o Flash para criar endpoints em paralelo, executar treinamentos e reunir os resultados.
- Para começar, a apresentação recomenda instalar a ferramenta, configurar a API key e consultar os exemplos no GitHub.
Capítulos
Seção intitulada “Capítulos”| Início | Capítulo | Resumo |
|---|---|---|
| 00:12 | O problema do ciclo com Docker | Dean apresenta o tempo e o trabalho envolvidos em reconstruir e reenviar uma aplicação a cada mudança. |
| 03:51 | Desenvolvimento e testes com o Flash | A demonstração mostra a criação de endpoints e a iteração entre consulta à GPU, geração de texto e geração de imagens. |
| 10:18 | Publicação da aplicação | Dean publica a aplicação sem Docker e testa a geração de uma imagem em um endpoint hospedado. |
| 12:22 | Projeto de hackathon e primeiros passos | O apresentador destaca um projeto feito com o Flash e explica como instalar a ferramenta e consultar seus exemplos. |
Citações
Seção intitulada “Citações”Não há mais necessidade de Docker. Execute o código como se fosse local, como se você tivesse a GPU. — 01:16
Você escreve seu código, executa e obtém os resultados. — 01:47
Você está programando e testando como se tudo acontecesse no seu sistema local. — 03:20
Sem Docker. Você não precisa lidar com Docker aqui. — 10:18
Conceitos e entidades
Seção intitulada “Conceitos e entidades”- RunPod (empresa): Empresa cuja plataforma de computação em nuvem é apresentada na demonstração.
- RunPod Flash (ferramenta): Ferramenta apresentada para desenvolver, testar e publicar aplicações de IA em GPUs sem usar Docker.
- Dean Quiñanola (pessoa): Engenheiro da RunPod que apresenta o Flash e demonstra seus recursos.
- Docker (ferramenta): Ferramenta de conteinerização cujo uso o Flash busca dispensar no fluxo demonstrado.
- CLI (conceito): Interface de linha de comando usada na apresentação para desenvolver e publicar aplicações.
- FastAPI (ferramenta): Framework usado para iniciar um servidor local durante a demonstração do desenvolvimento.
- NVIDIA GeForce RTX 4090 (modelo): GPU identificada pelo endpoint serverless em um dos testes.
- Hugging Face (empresa): Serviço mencionado durante o teste de geração de texto, quando a aplicação tenta se comunicar com seu servidor.
- GitHub (ferramenta): Plataforma onde a apresentação recomenda consultar os exemplos do Flash.
Tradução completa (pt-BR)
Seção intitulada “Tradução completa (pt-BR)”00:12 Olá, boa tarde a todos. Sou Dean Kinyanola, da Runpod Flash, e quero falar sobre como vocês podem implantar aplicações de IA sem Docker. Atualmente, é assim que se implanta uma aplicação serverless — especialmente aplicações de IA. Você escreve o código, cria seu arquivo Docker, executa vários comandos, como docker build, e tudo mais. Depois, envia a imagem para o Docker Hub.
00:44 Então, você executa a aplicação. Talvez consiga o que quer. Se não, precisa alterar o código de novo, reconstruir, enviar novamente e executar. Na minha experiência, às vezes esse ciclo leva cerca de 15 minutos, dependendo das alterações que você está fazendo. Meu nome é Dean Kinyanola. Sou engenheiro sênior na RunPod e tenho uma equipe inteira trabalhando para tornar isso mais fácil. Então, por que criamos o Flash? O desenvolvimento
01:16 do ciclo de iteração precisa de uma reformulação. É realmente um transtorno. Muitos de vocês são engenheiros de software ou engenheiros de ML que não querem ter que lidar com todo o DevOps. Então, enquanto trabalham nas suas ideias ou nos seus experimentos, querem ver os resultados. Chega de precisar do Docker. Execute o código como se fosse local, como se você tivesse a GPU. Teste suas alterações na hora e depure rapidamente, se precisar. Então, é assim que estamos pensando em
01:47 manter tudo simples. Você escreve seu código, executa e obtém os resultados. Reescreve seu código, executa e obtém os resultados. Certo? Claro, há a parte da implantação. Vou falar disso mais tarde. É tão simples que parece estar sendo executado localmente. Então, quais recursos temos? Conseguimos compilar e implantar mais rápido. Otimizamos a utilização dos recursos. Há muitos truques acontecendo nos bastidores, e tudo é intuitivo. É apenas código Python. É
02:18 basicamente qualquer coisa que você consiga executar localmente com uma GPU; basta fazer isso na nuvem. Então, o que você pode fazer com o Flash hoje? Temos endpoints serverless. No momento, está mais voltado para serverless, mas estamos trabalhando para oferecer isso também para pods. Temos endpoints Q para isso e endpoints com balanceamento de carga que você pode usar. Aqui está um recurso muito legal que incluí: comunicação de endpoint para endpoint. Às vezes, você está criando todos esses servidores, mas ainda precisa saber como se comunicar com cada servidor,
02:50 certo? Com isso, você não precisa fazer isso, porque é apenas um código se comunicando com outro código. Você executa uma função e parece que tudo está sendo executado localmente, mas, quando implanta em endpoints diferentes, todos se comunicam entre si. Tudo acontece nos bastidores. Também temos conexões com volumes de rede. Temos cache aquecido nas conexões com volumes de rede, de modo que, se você precisar escalar seus endpoints serverless, os dados em cache sejam mantidos nos volumes de rede. E a parte mais importante é o serverless ao vivo
03:20 . Você programa e testa como se tudo estivesse acontecendo no seu sistema local. E, sabe, isso seria apenas um projeto de brincadeira se não desse para implantar em produção, certo? Então, você quer implantar em produção. Servir a inferência, servir tudo o que você está criando. E estamos tornando isso possível inteiramente pela CLI. Vamos fazer uma demonstração. Espero conseguir fazer isso com uma mão só. Certo. Tudo bem. Então, minha demonstração aqui mostra
03:51 a evolução e a iteração rápida de uma função. A primeira função só consulta o torch para descobrir que tipo de GPU você tem. Vou fazer isso ao vivo. Vou executar flash dev. Isso inicia uma API FastAPI local. Assim, você pode experimentar com ela. Agora você quer testar. Vamos testar. Execute.
04:23 Ele está provisionando este endpoint serverless. Se formos ao console da Runpod e atualizarmos a página, vocês vão ver isto. Está em execução agora. Enquanto carrega, vamos mostrar os logs. Assim, vocês conseguem ver. Certo. Workers prontos. Sim.
05:02 Ah, John. Inicialização a frio. Isso é comum em todas as plataformas serverless. Ah, lá está. Está em execução. Temos logs, logs do contêiner. Ele está testando tudo isso, verificando se está tudo saudável, e executou a tarefa. Agora, se voltarmos aqui, vocês vão ver o resultado. Foi executada em uma Nvidia GeForce RTX 4090. Dá para ver toda a RAM e a quantidade de GPUs. Agora,
05:35 aqui vem a parte interessante. E se eu quiser alterar esta função e apenas testá-la? Aqui está outra versão da função. O que fazemos é adicionar mais código. Esse código simplesmente gera texto. E adicionei algumas dependências, as dependências de Python aqui. Ah, na verdade, vamos fazer isso primeiro sem o token do Hugging Face. Vamos ver o que acontece. Vejam, ele atualizou tudo. Atualizei esta página.
06:07 Teste de novo. Qual prompt devemos usar? Vamos usar string cheese. Isso existe mesmo? Execute. Vocês veem de novo aqui. Contêiner. Certo. Está iniciando. Vocês vão ver que todos os logs são mais simples aqui, porque vocês não
06:38 devem ser inundados com tanta informação. Mas o que está acontecendo é que ele instala as dependências na hora e até me avisou que está se comunicando com o servidor do Hugging Face sem o token. Deve terminar em breve. Certo, terminou. Vamos ver o resultado. Perguntei: «String cheese existe mesmo?». «Sinto muito, mas não posso responder.» Certo, isso foi bem provocador. Vamos mudar isso.
07:11 Vamos ativar meu token do HF. Isso é só uma alteração no código agora. Vamos publicar isso de novo. Vamos mudar o prompt. Vamos ver: quem é o Batman? Vamos executar. Pronto? Vamos ver como isso está funcionando aqui.
07:41 Legal. Estou fazendo isso com uma mão só. >> Certo, vamos terminar. Agora vemos o resultado. Ah, aí está. O Batman é um personagem fictício. Certo, já sabíamos disso. Vamos tentar algo mais complexo do que apenas gerar texto. Agora, vamos gerar uma imagem. Certo, atualizou. Vamos atualizar este localhost. Agora vocês veem «gerar imagem»
08:14 e vamos testar isso com um prompt. Vamos criar uma imagem de um Batman feito de string cheese. Certo, é assim que a IA criativa pode ser. Vamos ver o que está acontecendo. Logs em execução.
08:44 Ah, olhem só. Implantação em andamento. Certo. Tenho bastante tempo. Não é isso. Certo, tive que encerrar aquilo porque estava executando a versão antiga. Tudo bem. Agora é a versão nova. Não queria esperar por aquela
09:16 implantação. Só quero ver o Batman feito de string cheese. Certo. Ele respondeu com um base64. Tudo bem. Vou organizar isso antes de mostrar. Para renderizar, você pode usar o navegador.
09:47 Certo, vamos ver como é o Batman feito de string cheese. Isso não é string cheese, mas prova que deu certo, né? Conseguiu. Agora, e se você quiser implantar isso? Vejam só. Quando eu cancelo, o endpoint é desprovisionado. Assim, você não precisa deixar isso ocupando espaço. Vejam, sumiu. Agora, e se quisermos implantar isso? Vamos implantar.
10:18 Flash deploy. Ele empacota tudo, compila e envia para nossos servidores. De novo: sem Docker. Você não precisa lidar com Docker aqui. O empacotamento da sua aplicação é instantâneo; ela é enviada para nossos servidores e colocada em execução. Agora, vem a parte legal. Depois que ela está no ar, deixei este prompt preparado, mas preciso alterar este ID mais tarde
10:49 porque ele vai ser importante. Certo. O arquivo compactado foi criado e o Flash foi compilado. Certo. Enviando. Upload concluído. Implantando. Agora está no ar. Certo. Vamos ver o ID aqui. Tudo bem. Agora, vamos colocar isso para funcionar. Meu prompt é: uma lontra-marinha bebê fofa com uma gravata-borboleta.
11:19 Gere essa imagem. Ah, sim. Quero mostrar onde isso está. Agora está totalmente disponível para ser servido, certo? Seus clientes podem usar sua aplicação, que utiliza esse backend. Ela não está mais no meu localhost. Está hospedada. Certo, vamos ver o log dos workers. Quando terminar, deve imprimir o resultado aqui.
11:51 Aí está. Certo, vou ajustar isso para conseguir abrir. É uma loucura fazer isso com uma mão só. Certo, vamos carregar a imagem de uma lontra-marinha com gravata-borboleta. Não tem gravata-borboleta. Mas esse não é o ponto. Nós… Certo. Então, é isso. Essa foi a demonstração. Ontem tivemos uma hackathon e eu só
12:22 Queria apresentar isso a… Tenho muito orgulho desse cara, o Funka. Ele criou um wrapper em torno do nosso Flash que permite enviar uma ficha de dados com todos os seus experimentos, algumas especificações de alguns modelos, e executar tudo instantaneamente. A ferramenta distribui o trabalho, cria todos esses endpoints, executa o treinamento e depois retorna os resultados. E ele fez isso em três ou quatro horas. E não fazia ideia
12:53 de como usar o Runpod Flash. Ele teve que me perguntar se aquilo era sequer possível. Eu respondi: “Vamos ver.” E ele ficou muito surpreso quando venceu ontem, porque aparentemente o projeto dele nem era o melhor que tinha feito, e ele vive perdendo em outros hackathons. Então, tenho muito orgulho desse cara. Como começar a usar o Runpod Flash? Bem, você cria uma conta no RunPod, escaneia aquele QR code e ganha US$ 10 em créditos. E tudo o
13:23 que você realmente precisa fazer é instalar, escrever o código, fazer login para inserir sua chave de API, inicializar — haverá um esqueleto de aplicação, se você quiser —, usar o Flash no ambiente de desenvolvimento local ou fazer o deploy do Flash em produção. E temos todos esses URLs. O melhor conselho que posso dar é visitar os exemplos do Runpod Flash no GitHub, porque temos todos esses casos e exemplos que você pode consultar. Ou, se você gosta de programação com IA, basta executar o
13:54 Claude Code nesse repositório, e ele vai aprender tudo. Também temos skills, se você tiver interesse. E essa foi a minha apresentação.
Transcrição original
[00:12] Hello, good afternoon everyone. I’m uh Dean Kinyanola from Runpod Flash and um I want to talk to you about how you might be able to deploy AI applications without Docker. So currently this is how you deploy a serverless application. Well, especially AI applications. You write code, you build your docker file, you run a bunch of commands, docker build, all that. And then you push the image to docker hub.
[00:44] Then you execute it. Then maybe you’ll get what you want. If not, you have to change your code again, rebuild it, repush it, execute. Um, in my experience, sometimes this one loop takes about 15 minutes depending on the changes you’re doing. So, my name is Dean Kinyanola. I am a staff engineer at RunPod and I have an entire team that’s working on making that easy. So, why did we build flash? development
[01:16] iteration loop requires a makeover. It’s really a hassle. A lot of you guys are software engineers or ML engineers who really don’t want to deal with all the DevOps. So, as you’re working on your ideas or as you’re working on your experiments, you want the results. So, no more need for Docker. Run code like it’s local, as if you have the GPU. Uh test your changes instantly and debug quickly if you need to. So this is how we’re thinking about
[01:47] keeping it simple. You write your code, you execute, you get the results. Rewrite your code, execute, you get the results. Right? Of course, there’s the deployment part. I’ll talk about that later. So it’s so simple it feels like it’s running locally. So what are the features that we have? So we are able to build and deploy faster. We optimize the resource utilization. There’s a lot of tricks happening under the hood and it’s intuitive. It’s just Python code. It’s
[02:18] really whatever you can run locally with a GPU, just do it on the cloud. So, what can you do with Flash today? We have serverless endpoints. It’s mostly locked on serverless right now, but we’re working towards doing it for pods. Uh we have Q endpoints for it and load balance endpoints that you can use it for. Here’s the uh really cool feature that I put in an endpoint to endpoint communication. Sometimes you’re building all these servers, but then you still have to know how to contact each server,
[02:50] right? You don’t have to do that with this because it’s just a code talking to another code. You execute a function and it looks like it’s just local, but once you deploy it in different endpoints, it’s all talking to each other. It’s all happening under the hood. We also have network volume attachments. Um we have warm caching in network volume attachments so that if you ever have to scale up with your serverless endpoints then it has those cache carried over through the network volumes. And then the most important part is the live
[03:20] serless. Uh you are coding and testing as if it’s all happening in your local system. And then you know this would just be a toy project if you can’t deploy to production, right? So you want to deploy to production. So serve the inference, serve all the uh stuff that you’re building. And we’re making that possible all through the CLI. So let’s get a demo. Hopefully I can do this with one hand. Okay. All right. So my demo here shows
[03:51] the the rapid iteration and evolution of a function. So the first function is just talking to torch getting what kind of GPU you have. So I’ll do this live. I’ll do flash dev. And what this does is it launches a fast API local host. So you can actually toy around with it. So now you want to try it out. Let’s try it out. Execute.
[04:23] So it’s provisioning this serverless endpoint. And if we go to runpod console, refresh this, you’ll see this. This is running now. And as it’s loading, let’s let’s show the logs. So you can actually see it. All right. Workers ready. Yep.
[05:02] Oh, John. Cold start. This is common with all serverless platforms. Oh, there it is. So, it’s running. We got logs, container logs. So, it’s testing all these things, making sure it’s all healthy, and it ran the job. So, now if we go back here, you’ll see the result. It ran on an Nvidia GeForce RTX 4090. You see all the RAM, GPU count. Now,
[05:35] here’s the kicker. What if I want to change this function and just want to test it? So, here’s a different iteration of this function. What we do is we add more code. And this code really just does generation of text. And I’ve added some dependencies, the Python dependencies here. Oh, actually, let’s do this without the hugging face token first. Let’s see what’s happening. See, it refreshed everything. I refreshed this.
[06:07] Test it again. What prompt do we need? Uh, let’s do string cheese. Is it real? Run it. You see it again here. Container. Okay. It’s coming up. You’ll see all the the logs are simpler here because you’re not
[06:38] supposed to be inundated with so much stuff. But what it’s doing is in on the fly installing the dependencies and it even gave me a warning about communicating with the hugging face server without the token and it should be finished. Okay, now it’s finished. Let’s see the result. I ask is string cheese real? I’m sorry but I cannot provide answers. All right, that’s that’s spicy. All right, let’s let’s change that up.
[07:11] Let’s enable my HF token. That’s just changing the code right now. We release this again. Let’s change the uh prompt. Let’s see who is Batman. Let’s execute that. Ready? And let’s see how’s this working here.
[07:41] It’s cool. I’m doing this with one hand. >> All right, let’s finish. Now we see the result. Oh, there. There you go. Batman’s a fictional character. All right, we knew that. Let’s go for something that’s more intensive than just generating text. Now, we’ll do an image generation. All right, it refreshed. Let’s refresh this local host. Now you see generate
[08:14] image and then we’ll test this out with a prompt. Let’s create an image of a string cheese Batman. All right, this is how creative AI could be. Let’s look at what’s happening here. Running logs.
[08:44] Oh, look at that. Roll out in progress. Okay. I got plenty of time. That’s not it. All right. I just had to terminate that because it was running the the older version. All right. Now it’s new. I didn’t want to wait for that
[09:16] roll out. I just want to see string cheese Batman. All right. So, it’s it responded with a base 64. Okay. Let me clean that up before I show that. So how you can render this is through the browser.
[09:47] All right, let’s see what string cheese Batman looks like. That’s not string cheese, but that proves it right. It did it. Now, what if you want to deploy this? So, check this out. When I cancel it, it actually deprovisioned that endpoint. So, you don’t have to have that lying around. See, it’s gone now. Now, what if we want to deploy this? So, let’s deploy that.
[10:18] Flash deploy. That packages up the whole thing, builds it up, sends it to our servers. Again, no Docker. You’re not dealing with Docker here. This is instantaneous packaging of your application, sending it out to our servers, and serving it. Now, here’s the cool part. Once it’s out there, I have prepared this prompt, but I just need to change this ID later
[10:49] because this is going to matter. All right. So, it’s created the archive built flash. All right. Sending it out. Uploaded. Deploying. Now it’s up. All right. Let’s see the ID here. Okay. Now, let’s get this going. So, my prompt is a cute baby sea otter with a bow tie.
[11:19] Generate that image. Oh, yeah. I want to show you where this is. Now this is fully servable, right? Like you can have your customers, you know, use your application that uses this back end. It no longer lives in my local host. This is being hosted. All right, let’s see workers log. Okay, when it’s done, it should print the output here.
[11:51] There we go. All right, let me wrap this so I could pull this up. This is crazy doing it in one hand. All right, let’s load up the picture of a sea otter with a bow tie. There’s no bow tie. But that’s not the point. We All right. So, you get that. That’s the demo. We had a hackathon yesterday and I just
[12:22] wanted to be to present this to I’m very proud of this guy uh Funka. He created a wrapper around our flash that enables you to upload a data sheet of all your experiments of some specifications of some models and run it instantly and it just fans out builds out all these endpoints runs your training and then reports back to you. And he did this within three to four hours. And he had no idea
[12:53] how to do runpod flash. He had to ask me questions if this was even possible. I’m like, let’s see. And he was very surprised when he won yesterday because his his project was not even his best one apparently and he keeps losing to other hackathons. So just really proud of this guy. How do you get started with runpad flash? So, well, you sign up for an account on RunPod, scan that QR code, get some $10 uh credit now, and all you
[13:23] really have to do is just install it, write your code, log in to have your uh API key in there, initialize, it’ll have some skeleton application if you want, flash, the local dev that you have, or flash deploy to production. And we have all these URLs. The best advice I have is visit the runbot flash examples on GitHub because we have all these cases and examples that you could kind of refer or if you like AI coding just run
[13:54] cloud code into that repository and it will learn everything. We also have skills if you’re into that. And that is my presentation.