Design clássico · Sênior
ChatGPT: chatbot assistente pessoal
Projeto de entrevista clássico. Pontos centrais: pré-treino → SFT → RLHF, KV cache, batching, guardrails e memória de conversa.
Resposta curta
Projeto de entrevista clássico. Pontos centrais: pré-treino → SFT → RLHF, KV cache, batching, guardrails e memória de conversa. O ByteByteGo inclui no curso Generative AI System Design Interview um capítulo chamado “ChatGPT: Personal Assistant Chatbot”. A Educative tem, no curso de design de sistemas de IA generativa, um capítulo de geração texto-para-texto, descrito como o design de treino e…
01 · CONTEXTO
Um assistente conversacional em duas metades
O ByteByteGo inclui no curso Generative AI System Design Interview um capítulo chamado “ChatGPT: Personal Assistant Chatbot”. A Educative tem, no curso de design de sistemas de IA generativa, um capítulo de geração texto-para-texto, descrito como o design de treino e implantação de um sistema de IA conversacional eficiente.
O problema pode ser lido em duas metades: como o modelo é treinado para ajudar o usuário e como ele é servido a muitos usuários ao mesmo tempo. Ambas pertencem ao design de sistemas de machine learning.
02 · TREINO
Do modelo pré-treinado ao modelo alinhado
O artigo do InstructGPT parte de uma constatação: tornar os modelos maiores não os faz, por si só, seguir melhor a intenção do usuário, e modelos grandes podem gerar saídas falsas, tóxicas ou pouco úteis.
O ponto de partida é um modelo de linguagem já pré-treinado.
Rotuladores demonstram o comportamento desejado sobre os prompts, e o modelo pré-treinado é ajustado com aprendizado supervisionado nesses dados.
Rotuladores comparam saídas do modelo e indicam qual preferem; essas comparações treinam um modelo de recompensa que prevê a saída preferida.
A saída do modelo de recompensa vira recompensa escalar, e a política supervisionada é ajustada com PPO para otimizá-la.
As etapas de comparação e de otimização podem ser repetidas continuamente; a maior parte dos dados de comparação vem das políticas supervisionadas, e uma parte vem das políticas PPO.
No teste do artigo, saídas do InstructGPT de 1.3B parâmetros foram preferidas às do GPT-3 de 175B, com mais de 100x mais parâmetros.
Os prompts de treino enviados a versões anteriores do InstructGPT no API Playground passam por um filtro que remove os que contêm PII.
03 · SERVIÇO
Servir o modelo a muitos usuários
Depois do treino, o modelo precisa ser servido a vários usuários ao mesmo tempo. O desenho de referência coloca um balanceador diante dos servidores de inferência e uma camada de guardrails entre a entrada e o modelo.
O diagrama começa pelo usuário, que envia a mensagem à entrada da API.
O diagrama mostra uma camada de guardrails entre a entrada da API e o balanceador.
O diagrama coloca um balanceador diante do servidor de inferência.
O diagrama liga o servidor de inferência a um armazenamento com o histórico da conversa.
Em Transformers, os estados das requisições são os tensores de chave e valor da atenção, o cache KV, e a gestão desse cache é determinante para o tamanho máximo do lote.
O diagrama termina em um destino de métricas ligado ao servidor de inferência.
A geração token a token torna a carga memory-bound, subutiliza a computação da GPU e limita a vazão. No exemplo do artigo do vLLM, um LLM de 13B parâmetros em uma GPU NVIDIA A100 com 40GB de memória, aproximadamente 65% da memória fica com os pesos do modelo e perto de 30% guarda os estados dinâmicos das requisições.
04 · LOTE
Agrupar requisições sem fazer ninguém esperar
A vazão melhora ao agrupar várias requisições em lote. Como elas compartilham os mesmos pesos, o custo de mover pesos é amortizado entre as requisições do lote.
As requisições dos usuários podem chegar em momentos diferentes.
Uma estratégia de lote ingênua faz as requisições antigas esperarem as novas, ou atrasa as novas até as antigas terminarem, com atrasos significativos de fila.
As requisições podem ter comprimentos de entrada e saída muito diferentes, e uma técnica direta de lote preenche entradas e saídas para igualar comprimentos, desperdiçando computação e memória da GPU.
Com lote de granularidade fina, após cada iteração as requisições concluídas saem do lote e novas entram, e uma nova requisição espera uma única iteração, não o lote inteiro.
A gestão do cache KV é determinante para o tamanho máximo do lote.
| Lote ingênuo | Lote por iteração | |
|---|---|---|
| Espera | Requisições antigas esperam as novas, ou as novas esperam as antigas terminarem | Uma nova requisição espera uma única iteração, não o lote inteiro |
| Composição do lote | Preenche entradas e saídas para igualar comprimentos | Após cada iteração, as concluídas saem e novas entram |
| Preenchimento | Desperdiça computação e memória da GPU | Com kernels de GPU especiais, dispensa o preenchimento |
05 · DECISÕES
Pontos para discutir na prática
Guardrails de entrada e saída, memória de conversa e o custo por resposta, ligado a custo de GPU, ficam como pontos de discussão para a prática. Este artigo não afirma como o ChatGPT os implementa.
Perguntas frequentes
O que é ChatGPT: chatbot assistente pessoal?
Projeto de entrevista clássico. Pontos centrais: pré-treino → SFT → RLHF, KV cache, batching, guardrails e memória de conversa.
O que o design de ChatGPT: chatbot assistente pessoal cobre?
Ele está organizado nestas seções: Um assistente conversacional em duas metades, Do modelo pré-treinado ao modelo alinhado, Servir o modelo a muitos usuários, Agrupar requisições sem fazer ninguém esperar e Pontos para discutir na prática.
Quanto tempo leva ChatGPT: chatbot assistente pessoal e qual é o nível?
Leva cerca de 16 minutos para ler e tem nível Sênior.
Agora projete você mesmo
Rode este caso como uma entrevista na escola de System Design: você toma as decisões, o tutor as questiona e você vê a nota do seu desenho.