MistralAI & Gemma: Importando LLMs do HuggingFace com Ollama

Rhian Lopes da Costa
Fretebras Tech
Published in
8 min readApr 24, 2024

Introdução

Seguindo os estudos sobre LLMs, neste artigo iremos explorar a funcionalidade de importação de modelos a partir de fontes externas, como o HuggingFace, com o Ollama. O Ollama possibilita a importação de duas formas, sendo via arquivo GGUF como a LLM google/gemma-2b e a partir de PyTorch & Safetensors como a LLM mistralai/Mistral-7B-Instruct-v0.1.

Preparando o Ambiente

Neste artigo iremos dar continuidade nos estudos relacionados a Ollama e LLMs, por tanto, iremos utilizar o Playground desenvolvido no artigo anterior, com ele iremos focar na importação de LLMs presentes no HuggingFace.

HuggingFace

HuggingFace é uma empresa de tecnologia focada em inteligência artificial, especialmente em processamento de linguagem natural (NLP). Eles são conhecidos principalmente pela criação da plataforma open-source chamada “Transformers”, que oferece uma ampla variedade de modelos pré-treinados para tarefas de NLP.

A plataforma HuggingFace permite aos desenvolvedores acessar, treinar e implementar modelos de última geração em NLP de forma fácil e eficiente, além de fornecer uma comunidade vibrante para compartilhamento de modelos, recursos e discussões.

Por tanto, para termos acesso aos modelos que exploraremos hoje, é necessário fazer parte da comunidade do HuggingFace, para isso é necessário realizar o cadastro na comunidade.

Com a conta criada, em alguns modelos da comunidade será necessário concordar com os termos e solicitar acesso, vale ressaltar que o objetivo desse artigo é para fins educativos e cada modelo possui suas próprias licenças seja para fins de pesquisa ou comercial.

Os modelos que iremos utilizar são o mistralai/Mistral-7B-Instruct-v0.1 e o google/gemma-7b onde ambos os modelos, é necessário ter uma conta no HuggingFace e aceitar os respectivos termos de uso.

Importação de LLMs com Ollama

O Ollama possibilita a importação de duas formas, sendo via arquivo GGUF e a partir de PyTorch & Safetensors.

GGUF

GGUF (GPT-Generated Unified Format) é um formato de ficheiro para armazenar modelos para inferência com GGML e executores baseados em GGML. O GGUF é um formato binário concebido para carregar e guardar modelos rapidamente e para facilitar a leitura. Tradicionalmente, os modelos são desenvolvidos utilizando PyTorch ou outra estrutura e, em seguida, convertidos para GGUF para utilização em GGML.

A GGML é uma biblioteca em linguagem C para aprendizado de máquina, possibilitando a inferência na CPU. Ela estabelece um formato binário para a distribuição de modelos de linguagem de grande escala (LLMs).

PyTorch & Safetensors

PyTorch é uma biblioteca de código aberto para aprendizado de máquina e desenvolvimento de redes neurais, oferecendo uma estrutura flexível e eficiente para criar e treinar modelos.

Safetensors é um formato simples para guardar tensores, que visa garantir a segurança e a integridade dos dados manipulados durante o treinamento e a inferência, ajudando a evitar problemas comuns, como estouro de memória e manipulação inadequada de tensores.

Tensores são arrays multidimensionais que podem conter números, organizados em uma ou mais dimensões. Em contextos de aprendizado de máquina e processamento de dados, tensores são frequentemente utilizados para representar dados, como imagens, áudio, texto e outras formas de informação, bem como os parâmetros de modelos de aprendizado de máquina. Eles são a estrutura de dados fundamental em bibliotecas como PyTorch e TensorFlow.

Importando o google/gemma-2b

O Google Gemma-2B é uma versão atualizada do sistema de inteligência artificial Gemma, solução open-source desenvolvida pelo Google. Ele utiliza algoritmos avançados de aprendizado de máquina para processar e entender informações complexas, fornecendo resultados precisos e relevantes em uma variedade de contextos, desde pesquisa na web até assistência virtual.

Para importar o google/gemma-2b que utiliza o formato GGUF, podemos tanto realizar o clone do repositório diretamente a partir do HuggingFace. A partir da aba de mais opções e "Clone repository".

# Make sure you have git-lfs installed (https://git-lfs.com)
git lfs install

# When prompted for a password, use an access token with write permissions.
# Generate one from your settings: https://huggingface.co/settings/tokens
git clone https://huggingface.co/google/gemma-2b

O Git LFS (Git Large File Storage) é uma extensão do Git que lida especificamente com arquivos grandes em repositórios Git. Quando você trabalha com projetos que têm arquivos grandes, como imagens, vídeos, binários compilados, entre outros, o Git pode enfrentar problemas de desempenho ao tentar gerenciar esses arquivos, já que não foi projetado para lidar eficientemente com eles.

Quanto podemos realizar o download do arquivo *.gguf diretamente do repositório. Na aba "Files and versions" e efetuando o download do arquivo gemma-2b.gguf.

Com o download realizado, podemos mover o arquivo para uma pasta de sua preferência e criar um novo arquivo "Modelfile" no mesmo nível, o mesmo arquivo que utilizamos para a customização no artigo anterior, mas agora iremos utilizar o seguinte conteúdo:

FROM ./gemma-2b.gguf

Com isso, podemos executar o seguinte comando para executar o modelo importado localmente.

$ ollama create gemma-2b -f Modelfile

transferring model data
creating model layer
using already created layer sha256:084eb1abf609fe1735c2631f818bd24e93d29428fd2ba096852012152e37d14b
writing layer sha256:b568ac52f2923f015cfabcf0b275cfeedf2bb23d2b76482cdc3eaa1215f5d592
writing manifest
success

Feito isso podemos testar via CLI ou cURL:

$ ollama run gemma-2b "Why is the sky blue?"             

Why do you think that there are different colors of light?
What happens when you shine a light on an object? ...
$ curl -X POST http://localhost:11434/api/generate -d '{
"model": "gemma-2b",
"prompt":"Why is the sky blue?"
}'

{"model":"gemma-2b","created_at":"2024-04-17T18:36:27.612879Z","response":"\n\n","done":false}
{"model":"gemma-2b","created_at":"2024-04-17T18:36:28.135677Z","response":"The","done":false}
{"model":"gemma-2b","created_at":"2024-04-17T18:36:28.701042Z","response":" sun","done":false}
{"model":"gemma-2b","created_at":"2024-04-17T18:36:29.126573Z","response":" emits","done":false}
{"model":"gemma-2b","created_at":"2024-04-17T18:36:29.541035Z","response":" visible","done":false}
{"model":"gemma-2b","created_at":"2024-04-17T18:36:30.083705Z","response":" light","done":false}
...

E caso esteja executando o Open WebUI que criamos no último artigo, podemos utilizá-lo também para testar:

Para deletar o modelo, basta executar:

$ ollama rm gemma-2b

Importando o mistralai/Mistral-7B-Instruct-v0.1

O Mistral-7B-Instruct-v0.1 é um modelo de inteligência artificial desenvolvido pela MistralAI para instrução e ensino, ele é um fine-tuning do Mistral-7B, ou seja, recebeu uma etapa de treinamento extra para foco em chat. Ele utiliza técnicas avançadas de aprendizado de máquina para fornecer orientação e assistência em uma variedade de tarefas educacionais, oferecendo uma abordagem objetiva e eficaz para a aprendizagem

Para realizarmos a importação do mistralai/Mistral-7B-Instruct-v0.1 que utiliza o formato PyTorch & Safetensors, iremos realizar o clone do repositório do Ollama no GitHub, para utilizar as ferramentas disponibilizadas pelo Ollama para facilitar esse processo:

$ git clone git@github.com:ollama/ollama.git ollama

$ cd ollama

Feito isso, dentro do repositório do ollama, vamos configurar o sub-modulo do llama:

$ git submodule init

$ git submodule update llm/llama.cpp

Instalar as dependências necessárias do Python para a importação:

$ python3 -m venv llm/llama.cpp/.venv

$ source llm/llama.cpp/.venv/bin/activate

$ pip install -r llm/llama.cpp/requirements.txt

Por fim, efetuar o build da nossa ferramenta de "quantize":

$ make -C llm/llama.cpp quantize

"Quantize" ou quantização refere-se ao processo de reduzir a precisão dos parâmetros do modelo para economizar recursos computacionais, como memória e poder de processamento, sem comprometer muito a qualidade das previsões ou a performance do modelo.

Feito isso, podemos realizar o clone do repositório que iremos importar, no caso, o mistralai/Mistral-7B-Instruct-v0.1. Previamente acesse o repositório do HuggingFace e aceite os termos do modelo para seu uso:

Com isso, podemos seguir com o clone do repositório, será necessário o nome de usuário e gerar um token para utilizar como senha:

# Make sure you have git-lfs installed (https://git-lfs.com)
$ git lfs install

# When prompted for a password, use an access token with write permissions.
# Generate one from your settings: https://huggingface.co/settings/tokens
$ git clone https://huggingface.co/mistralai/Mistral-7B-Instruct-v0.1 model

Com o repositório clonado, iremos realizar a conversão do modelo:

$ python llm/llama.cpp/convert.py ./model --outtype f16 --outfile converted.bin

Obs: algumas arquiteturas de modelos requerem a utilização de scripts conversão específica. Por exemplo, os modelos Qwen requerem a execução do convert-hf-to-gguf.py em vez do convert.py

E agora conseguimos realizar a quantização do modelo:

$ llm/llama.cpp/quantize converted.bin quantized.bin q4_0

Com isso, podemos realizar a criação de um novo Modelfile com o seguinte conteúdo com referência ao arquivo "quantized.bin" que geramos.

FROM quantized.bin

TEMPLATE "[INST] {{ .Prompt }} [/INST]"

Por fim, basta executarmos o comando para abaixo para criarmos rodarmos nosso modelo:

$ ollama create mistral-7b -f Modelfile

transferring model data
creating model layer
creating template layer
using already created layer sha256:4197b5bc0618a4a03aea8c29f30f23bfd613586350c05b4e7d8a79ca1ff98657
writing layer sha256:68693db5eb3e0501c644080a545730fc93d2ca2dfddf03633642b99f3a1f0e3c
writing layer sha256:dcf2a8d5f1ee7f62ff3f0bd18c682c5661697fdc32d910b33a530be9e5aa9afa
writing manifest
success

Com o modelo em execução podemos testar via CLI ou cURL:

$ ollama run mistral-7b "Why is the sky blue?"

The sky appears blue because of a phenomenon called Rayleigh scattering. When sunlight enters Earth's atmosphere, it collides with particles such as nitrogen and
oxygen molecules, causing the light to scatter in various directions. Blue light has a shorter wavelength compared to other colors like red and orange, so it is more
easily scattered by these particles, making it the most visib...
$ curl -X POST http://localhost:11434/api/generate -d '{
"model": "mistral-7b",
"prompt":"Why is the sky blue?"
}'

{"model":"mistral-7b","created_at":"2024-04-22T20:50:59.516247Z","response":" The","done":false}
{"model":"mistral-7b","created_at":"2024-04-22T20:50:59.708287Z","response":" sky","done":false}
{"model":"mistral-7b","created_at":"2024-04-22T20:50:59.905127Z","response":" appears","done":false}
{"model":"mistral-7b","created_at":"2024-04-22T20:51:00.154091Z","response":" blue","done":false}
{"model":"mistral-7b","created_at":"2024-04-22T20:51:00.420183Z","response":" because","done":false}
{"model":"mistral-7b","created_at":"2024-04-22T20:51:00.633728Z","response":" of","done":false}
{"model":"mistral-7b","created_at":"2024-04-22T20:51:00.822677Z","response":" a","done":false}
...

E caso esteja executando o Open WebUI que criamos no último artigo, podemos utilizá-lo também para testar:

Para deletar o modelo, basta executar:

$ ollama rm mistral-7b

Conclusão

Neste artigo continuamos a exploração de funcionalidade que a ferramenta do Ollama disponibiliza, com essa base, conseguimos continuar os estudos e pesquisas agora utilizando e importando diversos modelos LLMs disponibilizados no HuggingFace.

Com as funcionalidades que exploramos no último artigo somado a essas, temos um mar de possibilidades na exploração de LLMs e ferramentas que tornam viável e acessível a execução local dos modelos.

Nos próximos artigos desejo explorar casos de uso e treinamento de LLMs para resolvermos problemas reais do dia a dia na prática. Espero que tenham gostado desse conteúdo!

Obrigado pela sua atenção! E até breve 😄

--

--

Rhian Lopes da Costa
Fretebras Tech

Olá! Me chamo Rhian, sou apaixonado por resolver problemas utilizando Tecnologia e Inovações