1 pontos por GN⁺ 2023-12-08 | 1 comentários | Compartilhar no WhatsApp
  • Usando a escolha de cartas no draft de Magic: The Gathering como tarefa, o experimento investigou o quanto o fine-tuning pode elevar o desempenho de raciocínio em um ambiente de cartas recentes que talvez não exista no corpus de treino de LLMs
  • Os registros de draft do 17lands foram convertidos em prompts, e as escolhas de jogadores com alta taxa de vitória foram usadas como sinal de resposta correta, fazendo o modelo escolher uma carta com base no pacote atual e no conjunto de cartas já selecionadas
  • O modelo de 7B parâmetros ajustado superou claramente o GPT-4 nessa tarefa, mostrou desempenho próximo ao de humanos ou do experimentador, e um GPT-3.5 com fine-tuning talvez pudesse ir ainda melhor, mas com custo muito maior
  • O formato dos dados e dos prompts era difícil de validar rapidamente por causa de ciclos longos de treino, e mesmo após cerca de 40 horas de experimentos ainda não havia certeza sobre o formato ideal de prompt
  • Na prática, é melhor criar primeiro um conjunto de avaliação e usar ferramentas como axolotl em vez de escrever do zero os próprios scripts de treino; mesmo LLMs OSS pequenos não são nada leves em termos de memória de GPU e armazenamento

Tarefa experimental: draft de Magic

  • O experimento usou drafts de Magic: The Gathering para observar até que ponto um LLM consegue raciocinar com dados fora de distribuição
  • Magic: The Gathering é um jogo estratégico de cartas colecionáveis em que criaturas e mágicas são usadas para enfrentar o oponente, e o draft é um formato em que os jogadores escolhem cartas alternadamente a partir de conjuntos aleatórios para montar um deck
  • O draft era adequado ao experimento por dois motivos
    • Raciocínio: para fazer uma boa escolha, é preciso entender em conjunto as cartas já escolhidas e as cartas do pacote atual
    • Dados fora de distribuição: novas cartas de Magic são lançadas de 4 a 6 vezes por ano, e as mais recentes podem não estar no corpus de treino do LLM
  • Os dados vieram dos registros de acompanhamento de draft do 17lands
    • O 17lands é um serviço que rastreia dados de draft do cliente digital de Magic
    • Observando as escolhas dos jogadores com maior taxa de vitória, foi possível construir um sinal próximo de uma “resposta correta”
    • Mesmo entre jogadores de Magic há muito debate sobre qual seria a escolha certa, então esse sinal não é totalmente inequívoco, mas foi suficiente para testar se o modelo aprendia uma nova tarefa

Construção do dataset e formato dos prompts

  • Os dados de draft do 17lands eram um grande arquivo CSV contendo aproximadamente as seguintes informações
    • Cartas disponíveis para escolha no pacote atual
    • Cartas já escolhidas pelo jogador até aquele momento
    • A carta realmente escolhida naquele pacote
  • Para adequar isso ao fine-tuning de modelos de linguagem, os dados foram convertidos para um formato de conversa em texto
    • A mensagem system definia o modelo como “DraftGPT” e instruía que, ao receber um pedido de pick de draft, respondesse primeiro com o nome da carta
    • A mensagem user incluía o número do pacote e o número do pick atual, o pool de cartas até então, a contagem por cor das cartas vistas nos 5 pacotes mais recentes e as descrições das cartas do pacote atual
    • A mensagem assistant emitia apenas o nome da carta escolhida
  • Exemplos dessa conversão estão em exemplo de transformação dos dados do 17lands em prompts para LLM e em prompt completo de draft em formato ChatML
  • A parte mais difícil foi formatar os dados de modo a produzir o resultado desejado
    • Em fine-tuning, testar uma mudança de prompt normalmente exige rodar um treino de várias horas
    • Por isso, o ciclo experimental parecia 100 vezes mais lento do que em engenharia de prompts convencional
  • Entre os itens testados estavam cerca de 5 formatos de prompt, a quantidade de detalhes por carta, a adição de contexto de alguns picks recentes e a inclusão de linhas de treino de “conhecimento sobre cartas” para fazer o modelo memorizar informações de cartas novas
  • Mesmo após cerca de 40 horas de experimentos, ainda não foi possível determinar com segurança qual formato de prompt era o melhor para essa tarefa

Ambiente de execução do fine-tuning

  • As GPUs foram alugadas por hora na Runpod
    • A GPU usada foi uma RTX 4090 com 24 GB de VRAM
    • O custo era de cerca de US$ 0,7/hora
  • No início, a intenção era escrever manualmente um script de treino com HuggingFace transformers e PEFT, e devido às limitações de GPU foi escolhido o QLoRA
  • Escrever o script manualmente envolveu muito tentativa e erro
    • Havia desde otimizações simples para quem já conhece, como FlashAttention, até opções difíceis de entender sem ler artigos, como os parâmetros de LoRA
    • Era possível resolver cada ponto individualmente, mas entender tudo por conta própria consumia muito tempo
  • No fim, foi usado o axolotl
    • Como ele já implementa várias otimizações por padrão, foi mais fácil de executar
    • A documentação era boa, e a ferramenta foi considerada um ponto de partida adequado para a maioria das pessoas que está começando com fine-tuning de LLMs

Tamanho do modelo e custo

  • Mesmo LLMs OSS “pequenos” são enormes pelos padrões de alguns anos atrás
    • O BERT frequentemente treinado por volta de 2019 tinha cerca de 110 milhões de parâmetros
    • Um modelo 7B é cerca de 70 vezes maior que isso
  • Um modelo 7B também pesa bastante na operação prática
    • Os pesos ocupam cerca de 16 GB, então armazenamento vira um problema
    • Mesmo com métodos como QLoRA, a memória de GPU continua sendo um ponto delicado
  • O fine-tuning do GPT-3.5 parecia ter potencial para gerar resultados melhores, mas o custo era alto
    • Era cerca de 100 vezes mais caro do que fazer fine-tuning do Mistral em bare metal
    • A inferência também tinha preço premium
    • Foi estimado que um fine-tuning de GPT-3.5 equivalente à maior execução de treino do Mistral-7B teria custado cerca de US$ 500

Método de avaliação e resultados

  • Antes do experimento, era importante montar primeiro um bom conjunto de avaliação
    • Nesta tarefa, alguns drafts completos foram separados do conjunto de treino, e foi verificado se o modelo escolhia as mesmas cartas que humanos
    • Com esse conjunto de avaliação, ficou mais fácil julgar os resultados do fine-tuning
  • A precisão na escolha da carta era relativamente fácil de definir, mas os critérios abaixo eram mais ambíguos
    • Quando o modelo fazia uma escolha diferente, essa escolha precisava ser justificável
    • Era desejável que o modelo pudesse explicar de forma razoável por que escolheu aquela carta
  • Esses critérios ambíguos foram verificados por avaliação visual/manual de vários exemplos, e esse processo era lento
  • O GPT-4 fazia menos escolhas estranhas que os modelos pequenos ajustados e era melhor em justificar suas decisões
  • O modelo 7B com fine-tuning superou com folga o GPT-4 com aprendizado em contexto nessa tarefa de escolha de cartas, tanto em precisão quanto em custo
  • Em um experimento, o modelo foi ajustado com um conjunto de cartas e depois avaliado em um conjunto de cartas que não tinha visto
    • Isso sugeriu que o modelo não apenas memorizou cartas boas, mas também generalizou em algum grau o conceito de draft

Magic Copilot e bots de draft

  • O modelo ajustado para picks de draft foi conectado aos logs do Magic Arena, e foi criado um app rápido em Electron chamado “Magic Copilot”, usado em alguns drafts
  • A escolha de cartas era gerada pelo modelo ajustado, e os comentários ficavam com o GPT-4
    • Na maior parte do tempo funcionava bem, mas às vezes o GPT-4 discordava da escolha do modelo ajustado e a rebatia imediatamente
  • Também foram conectadas 8 IAs de draft para rodar drafts simulados entre bots
    • Quando os bots passavam cartas apenas entre si, havia uma forte tendência a escolher decks de uma única cor
    • Quando escolhas humanas diferentes eram misturadas, os decks tendiam a convergir para formas muito mais normais
  • No geral, essa IA de draft parecia mais próxima de uma IA de draft forte e humana do que as que existem hoje
  • Em comparação com os bots de quick draft do Magic Arena, ela fazia escolhas mais próximas de drafters humanos de alta qualidade do que de bots heurísticos

1 comentários

 
GN⁺ 2023-12-08
Opiniões no Hacker News
  • Gostei porque este texto mostra bem como até uma ideia que parece conceitualmente simples pode ser difícil de implementar com fine-tuning de LLM
    Mesmo com um dataset inicial bastante bom e um modelo de partida, parece ter sido uma tarefa nada fácil. Esse tipo de modelo parece adequado para tarefas naturais, sem uma resposta definitiva. Por exemplo, escolher a carta perfeita a partir de uma lista de opções dada talvez seja difícil de resolver de forma combinatória, mas escolher uma boa carta é possível, e LLMs também conseguem se aproximar do desempenho humano. Acho que isso revela o conjunto de problemas que hoje podem ser resolvidos com fine-tuning de LLMs

    • Isso bate com a minha experiência. Em decisões de alto risco, quase nunca dão respostas excepcionais, mas em decisões de baixo risco dão respostas suficientemente boas
      Por exemplo, neste mês estou recebendo ajuda para encontrar presentes para amigos e crianças. Para resolver o problema, não preciso da melhor escolha, uma boa escolha já basta
    • Concordo, mas também não dá para simplesmente ignorar que isso foi um trabalho feito por uma única pessoa
    • Fico curioso se seria possível definir os problemas em que LLMs se saem bem por alguma classe de complexidade específica
  • Talvez não seja a mudança mais revolucionária no dia a dia, mas estou realmente ansioso por partidas contra bots com estilos de jogo interessantes em jogos como Magic: The Gathering
    Parece um caso claro em que a equipe de P&D poderia melhorar muito sua capacidade de criar e testar novas mecânicas em diversos níveis de jogo

    • O experimento de Dota 2 da OpenAI gerou muitos comportamentos interessantes, e até os profissionais ficaram impressionados
  • Na parte “com esses dados, extrair as respostas corretas observando as escolhas de draft feitas pelos melhores jogadores do serviço”, isso quer dizer que olharam os picks de draft em https://www.17lands.com/leaderboard e ordenaram por taxa de vitórias?
    Eu acho que o correto seria escolher Match Wins ou Trophies. Caso contrário, você não está medindo os melhores jogadores do serviço, mas aprendendo escolhas de draft em que a maioria das escolhas foi muito boa — ou seja, jogadores que tiveram sorte. Esse efeito também vai aparecer na validação e nos testes.
    Em vez de comparar com uma linha de base de LLM, acho que faria mais sentido comparar com uma linha de base que calculasse, a partir dos dados da 17lands, uma pontuação estilo “Elo” de cada carta em relação às outras. Antes de as duas cores serem definidas, recomendaria a carta com maior pontuação; depois de as cores serem definidas, recomendaria a carta de maior pontuação dentro dessas cores ou entre os terrenos.
    É possível que o LLM tenha algum conhecimento das regras, mas em cartas que vê pela primeira vez ele parece captar mais sinais como raridade da carta, custo e “ser grande”. A “precisão” no draft também parece baixa, e não sei bem se é isso que se queria dizer. Se, em situações em que todas as opções são em geral boas, como nas escolhas de alta taxa de vitória, isso significa que ele escolheu algo diferente do jogador dos dados originais, então escolher entre boas opções parece ainda mais difícil

    • O texto só não deixou isso claro, mas eles filtram na 17lands por jogadores com taxa de vitórias em partidas acima de 62% e que draftam em ranques altos
      O critério é Diamante ou superior. Ainda assim, eles olham todos os drafts desses jogadores, inclusive os que tiveram mau desempenho.
      Aqui, precisão significa se, em um pacote dado, ele fez a mesma escolha que um dos bons jogadores. Claro que é subjetivo e não é uma métrica perfeita, mas serve para verificar a capacidade de imitar drafters de alto nível
  • Fico curioso se, em vez de zerar a perda do prompt, eles também tentaram usar perda ponderada no Axolotl
    Em algum momento, acho que a documentação do GPT-3 da Microsoft dizia que, quando a resposta é curta — como o “Cut in.” daqui —, esse método era vantajoso. Fazer adaptação de domínio com subreddits ou fóruns antes do fine-tuning também pode ajudar

    • Essa é uma ideia muito boa, e eu não tinha pensado nisso. Vou adicioná-la à lista de coisas para testar
      Eu também estava pensando em adaptação de domínio, e estou considerando junto transcrever vídeos de draft no YouTube. Estou bem curioso para ver quanto isso pode ajudar
  • Se li corretamente o texto do autor, em cada momento de escolha o prompt dado ao agente inclui, do pool de cartas até então, apenas os nomes das cartas, e somente as cartas do pacote recebido vêm com o texto completo
    Provavelmente o contexto entre as escolhas não é mantido por causa do tamanho da janela de contexto.
    Se for isso, e se a suposição de que esses sets são posteriores ao cutoff de treinamento do bot estiver correta, ser um bom drafter não é pura sorte? O bot literalmente não tem como saber quais cartas combinam bem com os picks anteriores, quais sinais enviou e recebeu até agora etc. Nem o melhor jogador humano conseguiria saber, só olhando “Gadwick's First Duel -- {1}{U} (uncommon)” no prompt de exemplo, com o que essa carta combina se nunca a tivesse visto antes.
    No fim, ele vai escolher cartas de draft geralmente boas que compartilham cores com os picks anteriores, e isso é algo que as heurísticas existentes baseadas em ordem de picks sempre fizeram

    • Não é exatamente assim. Há alguns caminhos pelos quais o modelo aprende o texto completo das cartas
      O modelo também é treinado com dados de completação de quizzes de cartas, em que precisa completar informações como o texto completo da carta, tipo e CMC. Além disso, para as cartas dentro do pacote, ele também precisa aprender a completar o próximo token, então, enquanto cria picks de draft, também aprende a prever o texto completo das cartas. Somando tudo, o bot aprende de forma bastante abrangente o texto das cartas novas
  • Se você ainda não viu, https://news.ycombinator.com/item?id=38525978 também pode ser interessante para este público
    É o texto “I hacked Magic the Gathering: Arena for a 100% win rate”, e já vale a leitura só pelo fato de o pesquisador ter descoberto que a pseudo-IA do MTGA, Sparky, não parece ser tão estupidamente complexa quanto se suspeitava de fora

    • Sparky é a IA do Arena, mas nunca foi considerada uma boa IA do Arena
      Ela existe mais para dar a novos jogadores que estão conhecendo o jogo e ainda nem sabem as regras uma experiência de jogar contra um computador burro, ou como uma versão computadorizada de “jogar contra um peixinho dourado” para ver como o deck criado compra cartas e faz combos. Não é algo como uma CPU de xadrez
  • É muito interessante que seja possível representar um draft com um LLM
    As IAs de draft com melhor desempenho que já vi usavam algum tipo de aprendizado de representação. Referência: https://arxiv.org/pdf/2107.04438.pdf

    • Se não li errado, o artigo linkado parece usar codificação one-hot, não embeddings aprendidos, para representar cada carta
      Se “aprendizado de representação” foi usado em outro sentido, posso ter entendido mal
    • Eu não tinha visto isso, e é muito bom. Considerando a quantidade de dados, acho até que uma abordagem assim poderia se sair melhor que um LLM, mas os resultados são interessantes
      Ainda assim, há algo divertido nas representações com LLM. Por exemplo, dá para dar preferências ou personalidade ao bot via prompt de sistema, o que é bem divertido
    • A área está avançando rápido demais; é realmente difícil acompanhar
  • Fico curioso se seria possível usar um modelo menor ou obter resultados melhores tratando cada carta como um token, dando o estado do draft como entrada e fazendo o token previsto ser a carta a escolher
    Provavelmente seria preciso treinar do zero com um tokenizer customizado

    • Há algum tempo, tentei adicionar tokens especiais a um dataset no estilo Reddit. O formato era <|post_author|>username<|post_title|>title here...
      O modelo resultante foi muito pior do que quando tudo era formatado como texto comum. Foi com MPT-30B, 15 tokens especiais, 300 milhões de tokens de treinamento e fine-tuning completo.
      Posso ter feito algo errado, mas ainda não vi casos de fine-tuning open source em que um grande número de tokens tenha sido adicionado com sucesso
    • Eu também pensei em algo bem parecido. Com uma abordagem assim, talvez até uma configuração básica de rede neural funcione bastante bem, e talvez nem seja necessário um LLM
      Não funcionaria para “cartas nunca vistas antes” e, quando errasse, provavelmente faria escolhas absurdas, mas acho que poderia chegar a 90% de precisão
  • Seria interessante comparar com treinar uma rede neural para draft sem usar a Mistral como ponto de partida. Gostaria de ver tanto por número de épocas quanto por custo
    Não está claro por que o componente de LLM é relevante. Talvez haja listas de decks ou drafts simulados suficientes na internet para ter influenciado, ou talvez a infraestrutura de “fine-tuning de LLM” simplesmente esteja mais madura do que a de “criar uma rede neural”. Talvez precisemos de algo como nnfiddle para facilitar isso

    • A vantagem de um LLM é que o checkpoint basicamente já “entende” muitas coisas
      O fine-tuning é relativamente barato, e só empurrar os dados para dentro já consegue fazê-lo realizar tarefas desse tipo razoavelmente bem. Criar o checkpoint base exige muito processamento, mas a maior parte do “conhecimento” está lá dentro.
      Para criar uma rede neural do zero, primeiro é preciso resolver como mapear as cartas para entradas. Não sei muito sobre MTG, mas a maioria dos jogos de cartas colecionáveis tem descrições em texto e efeitos complexos. Mapear texto para lógica é algo em que LLMs são realmente bons; caso contrário, você parte do zero e ainda precisa de uma quantidade relativamente grande de processamento até surgirem comportamentos razoáveis.
      Para a maioria dos desenvolvedores de software, esse caminho também é mais fácil. Fine-tuning, em geral, é reunir texto e colocá-lo em um script de fine-tuning. Dá para fazer sem saber álgebra linear nem o que é “convolução”
    • Sem a Mistral, como o modelo generalizaria para cartas que nunca viu antes?
      Estou assumindo que “treinar uma rede neural para draft sem a Mistral” significa usar como camada de entrada um vetor bitmap das cartas no booster. A funcionalidade central deste experimento é que o modelo funciona só com o texto das cartas mesmo em sets que ele nunca viu e para os quais há zero dados de treinamento. Acho difícil fazer isso sem um LLM
  • Gostei muito deste texto. Na verdade, eu estava analisando fine-tuning de LLMs para Magic: The Gathering esta semana
    Estou criando um pequeno navegador de similaridade de cartas que encontra cartas funcionalmente parecidas ou com clima semelhante usando embeddings semânticos das cartas.
    Por enquanto estou usando apenas InstructorXL, mas não sei se o Instructor tem pouco conhecimento inato sobre o jogo ou se eu preciso criar prompts melhores. Até agora testei 9 prompts, mas o desempenho na geração dos embeddings não pareceu muito bom: https://github.com/HanClinto/MtgMatrix/blob/main/data/create...
    O próximo passo era baixar um dataset de cartas parecidas e ver se, com isso, eu conseguiria treinar um modelo grande de embeddings com algo como perda por tripletos. Ainda não descobri como conectar isso na prática, mas este texto é extremamente inspirador