Run copilot locally
Tags: linux, githubcopilot, llama, gemma
Published: 2024-04-15 17:14:56

Vamos a instalarnos nuestro propio copilot ejecutándose en local, de forma que no necesitemos ninguna conexión a internet para disfrutar de ello. Evidentemente, la potencia del ordenador será determinante para que sea agradable o no.

Tengo instalada la distro 'neon-user-20240229-0716.iso' y este documento utiliza como referencia todas aquellas acciones necesarias para esta distribución Linux.


## Documentación

Puedes encontrar la documentación de Ollama en su web: [https://ollama.com](https://ollama.com)

Su repositorio es [https://github.com/ollama/ollama/tree/main](https://github.com/ollama/ollama/tree/main)

Y su imagen docker es [https://hub.docker.com/r/ollama/ollama](https://hub.docker.com/r/ollama/ollama)

Los modelos disponibles en este momento para Ollama están listado aquí: [https://ollama.com/library](https://ollama.com/library)

La memoria necesaria dependerá del tipo de modelos que queramos. Un modelo de 2B necesita unos 2 GB de RAM aproximadamente, mientras que un modelo de 7B necesita unos 8 GB, un modelo 13B utilizará unos 16 GB y un modelo 33B consumirá unos 32 GB. Se recomienda tener un buen SSD y al menos 20 GB libres.

Olvídate de la SWAP: muerte y destrucción.


## Instalación

Antes de empezar a instalar, debemos tener en cuenta que "deberíamos" tener una muy buena GPU y Cuda convenientemente configurados. Sobre esto ya hablamos en otro articulito. Pero como no nos sobra el dinero, pues veremos cómo tener nuestro copilot con GPU y solo con CPU.

Vayamos primero a lo rapidito.


### Instalación de Ollama para utilizar GPU y Cuda

Es es la parte más fácil, ejecuta en la consola:

```
curl -fsSL https://ollama.com/install.sh | sh
```

ahora puedes ejecutar comandos desde su interfaz, como por ejemplo `/?` o `/bye`. Sal de 'Ollama' y continuemos con nuestra consola. Vamos a instalarnos la versión 2B de Gemma (la IA de Google en su versión básica):

```
ollama run gemma:2b
```

Al ser la primera vez tardará bastante, después ya será más rapido el inicio de sesión.

Ya tienes instalado Ollama y Gemma, puedes comprobar la versión de Ollama lanzando:

```
ollama --version
```

o, si tienes ganas de empezar a preguntarle cosas:

```
echo "¿Entiendes la lengua de Cervantes?" | ollama run gemma:2b
```

También puedes realizar la consulta a través de su API, te pongo un ejemplo con curl:

```
curl -X POST http://localhost:11434/api/generate -d '{ "model": "gemma:2b", "prompt":"¿Entiendes la lengua de Cervantes?"}'
```

Si quieres desinstalarlo, sigue los pasos indicados en su repositorio:

```
https://github.com/ollama/ollama/blob/main/docs/linux.md
```

Recuerda, la instalación nativa se ejecuta directamente sobre la GPU y la memoria necesaria tiene que ser VRAM disponible por la GPU... sí, también puede pedirse que se ejecute por CPU, pero si vas a necesitar utilizar la CPU mejor que pruebes con el siguiente apartado.


### Instalación de Ollama para utilizarse solo con la CPU

La diferencia estriba en utilizar la imagen docker, que podemos lanzar la imagen solo para CPU (la parte fácil) o configurarla para utilizarlo con la GPU en la dockerización.

En la documentación del repo de Ollama se indica como poner en funcionamiento el docker para utilizar la GPU. No es necesario que replique aquí los pasos, pero, necesitarás instalarte el 'NVIDIA Container Toolkit'.

Vayamos a lo importante. Descargar la imagen de Ollama:

```
docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
```

Y lanzar una ejecución, en esta primera ejecución descargaremos un modelo, esta vez 'llama2':

```
docker exec -it ollama ollama run llama2
```

O puedes descargarte un 'codellama', 'codegemma', ... 

Vamos a pedirle alguna cosica:

```
docker exec -it ollama ollama run llama2 "Summarize this file: $(cat README.md)"
```

No sé si pedírselo en inglés o en castellano, bueno, total, para un copy/paste lo mismo daba :)


## Algunas cosas más

En los casos que has visto, Ollama está en el puerto 11434, por lo que entrando a tu localhost:11434 tendrás un bonito mensajito.

Si prefieres tener una WebUI, tienes el siguiente repo que te dice cómo: [https://github.com/ollama-webui/ollama-webui](https://github.com/ollama-webui/ollama-webui)

Hay más cosas, pero eso será otro día.