Agora que você escolheu como servir seu modelo, é hora de escolher qual modelo servir. Isso pode parecer intimidante, mas não se preocupe! Aqui estão algumas dicas importantes para ajudá-lo a tomar uma decisão informada.
Verifique se o modelo é verdadeiramente aberto
Embora muitas empresas usem o termo “Open Source” para descrever seus modelos, é importante verificar se eles são realmente abertos. O site IsItOpen pode ajudá-lo a verificar se o modelo tem restrições de uso que podem afetar seu uso comercial.
Escolha um modelo adequado para o seu caso de uso
Cada modelo tem seus próprios casos de uso e performa melhor em diferentes tarefas. Use as informações no card do modelo no HuggingFace (uma plataforma para hospedagem e compartilhamento de modelos e conjuntos de dados) outros para conhecer os casos de uso de cada modelo.
Ajuste os parâmetros do modelo
Mesmo se você escolher o modelo correto para seu caso de uso, pode ser necessário ajustar os parâmetros do modelo para que ele se comporte da maneira esperada. Isso pode incluir ajustes para tornar o modelo mais conservador ou mais criativo. Por exemplo, ao usar ferramentas como Ollama e LM Studio, você tem a opção de ajustar parâmetros como a “temperatura” do modelo, “top k” e “top p” e muitos outros que modificam a forma como o modelo vai se comportar em relação aos dados de entrada.
Modelos recomendados
Se você não sabe qual modelo escolher ou se sinta sobrecarregado com tantas escolhas, aqui estão alguns modelos que podem ser úteis:
Obviamente, você também pode fazer uso de modelos proprietários e não abertos, como o Llama 3. Nesse caso, entretanto, é recomendável verificar licença e as restrições de uso.
Além disso, você também tem a possibilidade de usar modelos servidos por empresas especializadas e/ou através de APIs específicas. Alguns exemplos: ChatGPT, Gemini, Claude 3.5 Sonnet. Nesse caso, vale considerar o custo, restrições de uso e a disponibilidade de ferramentas compatíveis com as APIs utilizadas.
Um importante detalhe sobre o InstructLab
Se você decidir usar o InstructLab para servir seu modelo, é importante notar que você precisará de modelos ajustados para esse projeto.
O InstructLab fornece no momento duas famílias de modelos abertos que você pode usar:
- Granite base: de uso geral, baseado no IBM Granite 7B base.
- Merlinite: um derivado do Mistral 7B, de uso geral, preparado para LAB.
O InstructLAB também conta com funcionalidades para converter, quantizar e empacotar os modelos no formato GGUF (eu nunca cheguei a testar essas funcionalidades, mas vale a pena tentar caso você queira usar algum modelo específico diferente dos distribuídos pelo projeto).
Consulte a documentação do projeto para saber mais sobre como escolher e preparar os modelos corretos.
Parâmetros, formatos, quantização e outros detalhes relevantes
Ao navegar pelo HuggingFace você vai encontrar diferentes tipos de arquivos, em diferentes formatos e tudo mais. Para seus primeiros passos em IA com Java, os detalhes específicos de cada um deles não são muito relevantes nesse momento. De modo geral, você precisa levar em consideração os seguintes detalhes:
Parâmetros
Você encontra muitos artigos descrevendo o que são parâmetros em LLMs. Eu gosto muito desse post que descreve os parâmetros como botões e alavancas que podem ser manipulas para ajustar o entendimento e comportamento de geração do modelo.
No HuggingFace você encontra modelos de diferentes tamanhos, sendo bastante comum encontrar:
- 7b: 7 bilhões de parâmetros.
- 8b: 8 bilhões de parâmetros.
- 13b: 13 bilhões de parâmetros.
Via de regra, quanto maior a quantidade de parâmetros, maior a quantidade de memória (de vídeo – vRAM – ou, em sua falta, de sistema – RAM) necessária para carregar o modelo. Existem inúmeros artigos detalhando como estimar a memória necessária para carregar os modelos. A grosso modo, se você tem um hardware com os requisitos mínimos que eu descrevi no primeiro artigo, você deve ser capaz de usar um modelo com algo em torno de 8b parâmetros – com quantização de 4 bits – sem maiores problemas.
Dica: uma das funcionalidades legais do LM Studio e que não existe em outros aplicativos é que ele mostra quais modelos você pode ser capaz de carregar na memória da sua máquina.
Quantização
Quantização é uma técnica para reduzir a memória necessária para carregar os modelos. Isso é feito através da redução da precisão dos “pesos” usados pelo modelo. Você geralmente encontra as informações sobre quantização no card do modelo ou através de tags ou nome dos arquivos.
As tags normalmente tem o formato de nome Qx_f_t onde “x” representa o número de bits da quantização, “f” representa o formato e t representa o mix de tipos de quantização utilizados. Exemplos de tags/nomes comumente utilizados para se referir a modelos quantizados: Q4_K_M (4 bits de quantização), Q5_K_M (5 bits de quantização), Q5_K_S (5 bits de quantização), etc. O formato de quantização e o mix, nesse momento, não são relevantes.
Formatos
Você geralmente encontra os modelos distribuídos em diferentes formatos:
- Safetensors: um formato simples para armazenamento de tensors.
- GGML (GPT-Generated Model Language): uma biblioteca de tensors que facilita o uso em diferentes formatos
- GGUF (GPT-Generated Unified Format): outra biblioteca de tensors, um pouco mais moderna, que busca corrigir algumas da deficiências do formato GGML.
Via de regra, prefira o GGUF: bem suportado em boa parte das ferramentas usadas para desenvolvimento de aplicações inteligentes (Ollama, InstructLab, LM Studio, etc).
Conclusão
Escolher o modelo adequado é um passo importante na implementação do seu sistema inteligente em Java. Lembre-se de verificar se o modelo é verdadeiramente aberto, escolher um modelo adequado para o seu caso de uso e ajustar os parâmetros do modelo. Além disso, há muitos recursos disponíveis on-line que podem ajudá-lo a encontrar o modelo certo para você!