Olá a todos,
Hoje, no seguimento do tema de um dos nossos últimos posts, continuaremos a nossa viagem pelo mundo da IA.
Desta vez, a viagem será pelo processo de carregamento de novos modelos de machine learning na nossa instancia de Ollama2, vindos diretamente de uma comunidade de AI que dá cartas sobre o tema.
O que é o Ollama2?
Para aqueles que estão a perguntar “O que raio é o Ollama2?”, e não leram o meu ultimo post sobre o tema permitam que vos informe: O Ollama2 é uma plataforma LLM incrível – e muito fácil de ter em ambiente on-premise ou self host – que permite aos entusiastas de machine learning carregar e compartilhar seus próprios modelos treinados, facilitando assim a colaboração e fomentando a exploração que é o motor da comunidade de IA.
Porque carregar novos modelos?
A resposta a esta pergunta é realmente simples: diversidade e inovação! Ao adicionarmos novos modelos á nossa instancia de Ollama2, estamos a amplificar o leque de ferramentas disponíveis para resolver problemas. Por exemplo, resumir um documento, ou escrever um texto, ou até escrever código. É algo que abre espaço para criatividade e descobertas surpreendentes.
Vejam isto como o paradigma de não aparafusar um parafuso com um martelo, ou martelar um prego com uma chave de fendas. Uma ferramenta adequada para a tarefa especifica.
Como carregar novos modelos?
Tecnicamente o desafio tem duas formas de ultrapassar. Uma das quais pode parecer intimidante à primeira vista, mas não se preocupem – é extremamente fácil e simples de efetuar.
Passo 1: Preparem-se
Antes de começar, certifiquem-se de teem o vosso Ollama2 a escutar as portas necessárias e que tem acesso de consola/ssh ao mesmo.
Passo 2: Faça o Upload/Download do ML desejado.
Nota: O método mais habitual – que é através da webui – já foi apresentado no post anterior sobre o tema. Esta forma especifica descrita abaixo, implica acesso por consola ao sistema que está a executar o nosso ML
Escolham o modelo que melhor se adequa á vossa necessidade. No meu caso, irei instalar um deepseek-coder:q5 que para mim, e para o que quero, contem o perfeito equilíbrio entre o que necessito e os recursos que tenho disponíveis para o fazer. Notem porem que o deepseek-coder:q5 vem num formato que a webui não consegue gerir para carregar, razão pela qual apresento o seguinte procedimento.
Em primeiro lugar, navegar até á pagina huggingface que é como um search engine para modelos de ML:
Em seguida no search field, procurar por deepseek-coder. O resultado será algo como isto:
De todos os campos que são apresentados, estamos particularmente interessados em campos que tenham a referencia GGUF que é um “formato” que o nosso Ollama2 consegue carregar sem grande dificuldade via o CLI nativo (consola), mas não através da webui:
Em seguida, files and versions:
Em seguida, escolher o ML model que nos interessa mais. Para mim, descobri que os modelos Q5 tem o melhor equilíbrio entre qualidade de resposta e tamanho/carga no sistema:
Em seguida, descarregar o ficheiros (copy do link de download):
wget "https://huggingface.co/TheBloke/deepseek-coder-6.7B-instruct-GGUF/resolve/main/deepseek-coder-6.7b-instruct.Q5_K_S.gguf?download=true" -O deepseek-coder-6.7b-instruct.Q5_K_S.gguf
Agora, é hora de aguardar o download e passar ao passo 3.
Passo 3: Preparação para carregamento do novo modelo de ML no nosso Ollama2
Para carregar o nosso novo modelo, é necessário construir um “template” file com as instruções do modelo:
FROM /models/deepseek-coder-6.7b-instruct.Q5_K_S.gguf TEMPLATE """### System: {{ .System }} ### User: {{ .Prompt }} ### Assistant: """ PARAMETER num_ctx 4096 PARAMETER stop "</s>" PARAMETER stop "### System:" PARAMETER stop "### User:" PARAMETER stop "### Assistant:" PARAMETER num_thread 23
Nota: Na secção from indicar a full path do nosso ficheiro gguf descarregado no passo anterior. No meu caso, foi descarregado para uma diretoria chamada /models.
Alterar igualmente o numero de threads de CPU que querem que o vosso ML utilize. No meu caso, 23 threads.
Passo 4: Carregamento do novo modelo de ML no nosso Ollama2
Agora que temos o nosso template pronto, chegou a hora na consola, de carregar o ML em si no nosso Ollama2
# ollama create deepseek-coder-6.7b-instruct.Q5:latest -f model_deepseek-deepseek-coder-6.7b-instruct.Q5_K_S
O Ollama2 irá carregar o vosso template e modelo, e no fim o resultado será algo como:
# ollama list NAME ID SIZE MODIFIED deepseek-coder-6.7b-instruct.Q5:latest f7362531c16f 4.7 GB 2 weeks ago
# ollama show --modelfile deepseek-coder-6.7b-instruct.Q5:latest
# Modelfile generated by "ollama show" # To build a new Modelfile based on this one, replace the FROM line with: # FROM deepseek-coder-6.7b-instruct.Q5:latest FROM /usr/share/ollama/.ollama/models/blobs/sha256:1362c06f3036b4c4994bd8497ecbc0b487acb67e568b4addb4b17fc1e863f688 TEMPLATE """### System: {{ .System }} ### User: {{ .Prompt }} ### Assistant: """ PARAMETER num_ctx 4096 PARAMETER num_thread 23 PARAMETER stop "</s>" PARAMETER stop "### System:" PARAMETER stop "### User:" PARAMETER stop "### Assistant:"
O resultado final será igualmente visível na vossa webui (alem deste tenho váriosoutros que estou a testar):
Podemos em seguida fazer questões direcionadas a tarefas de programação:
E pronto chegamos ao fim de mais um post semanal. Em breve vos trarei as minhas escolhas pessoais (algumas já são visíveis nessa imagem com o dropdown dos modelos que estou a executar) e as escolhas da comunidade sobre o tema.
Irei ainda explorar funções como o RAG que podem em muito nos simplificar o dia.
Até ao próximo post, e já sabem onde me encontrar caso encontrem algum ponto menos correcto.
Abraço!
Nuno