karlinux

Ollama con AMD RX6600

Hola de nuevo, regreso rápidamente porque estoy de exámenes con otra píldora para mi súper interesante.

El hecho es que no le tengo especial cariño a la IA, sobre todo a las IAS en remoto. No obstante al Cesar lo que es del Cesar, la veo altamente útil para su utilización en programación. Simplemente hay que saber utilizarla. Y es donde los seres humanos hemos perdido el enfoque. Para el desarrollo de software que es a lo que me dedico ahora mismo, la forma más útil de utilizar la IA, siempre bajo mi perspectiva, es como "profesor"; es decir, para tener explicaciones de como funciona una clase, librería... o porqué se utilizan unas determinadas funciones o métodos.

Lo que realmente no tolero, es la utilización que hacemos para que nos haga apps o programas sin ni siquiera saber como se llevan a cabo estos o como funciona ni siquiera el lenguaje que hay bajo el capó. Esto es lo peor que puede hacer el ser humano con su conocimiento, dejar de pensar.

Pero bueno, lo que venia diciendo, me parece interesante la utilización de un modelo de IA en local para utilizarlo como ayudante en programación y sin tener que depender de plataformas privadas en las que uno realmente no sabe uno donde acaban sus datos. Para poder ejecutar un modelo en local, bien necesitas una tarjeta gráfica (gpu) medio potente o una cpu con núcleos npu.

Mi gpu no es una de las tarjetas gráficas mas potentes del mundo y además no es muy compatible con las IAS (donde se lleva la palma nvidia y su núcleos cuda), pero haciendo alguna modificación en su identificación se puede hacer que rinda y por cierto bastante bien sobre todo con modelos pequeños.

Os dejo los pasos de configuración para un buen funcionamiento en archlinux, (en Ubuntu por ejemplo se realiza mediante la instalación de los drivers propietarios de amd y es un poco más engorroso). En archlinux y fedora es suficiente con la instalación de rocm, unas librerías encargadas de la función de la gpu para Inteligencia Artificial.

Al lío, en primer lugar instalación de las librerías rocm:

sudo pacman -S rocminfo rocm-opencl-sdk rocm-hip-sdk rocm-ml-sdk

Instalación de ollama con soporte para rocm:

sudo pacman -S ollama-rocm

Añadimos el usuario a render y video

sudo usermod -a -G render,video $USER

Editamos el archivo de entorno de ollama en systemd:

sudo systemctl edit ollama.service

Añadimos estas variables de entorno en la parte superior para que detecte la gráfica (no below).

[Service]
Environment="HSA_OVERRIDE_GFX_VERSION=10.3.0"
## En el caso que tengas mas de una tarjeta de video habria que seleccionarla
# Environment="HIP_VISIBLE_DEVICES=1"

Recargamos el systemd y ollama

sudo systemctl daemon-reload
sudo systemctl restart ollama

Añadimos la variable a nuestro bash o zsh, que es mi caso:

echo 'export PATH=$PATH:/opt/rocm/bin' >> ~/.zshrc
source ~/.zshrc

Y ya está, tenemos nuestra grafica rx6600 (también vale para la rx5500), funcionando con un Inteligencia Artificial en local, os dejo el rendimiento de la IA con un modelo mediano de deepseek-coder de 3,8Gb

----------------------------------------------------
        Model: deepseek-coder:6.7b
        Performance Metrics:
            Prompt Processing:  2584.99 tokens/sec
            Generation Speed:   38.57 tokens/sec
            Combined Speed:     45.81 tokens/sec

        Workload Stats:
            Input Tokens:       83
            Generated Tokens:   434
            Model Load Time:    0.03s
            Processing Time:    0.03s
            Generation Time:    11.25s
            Total Time:         11.58s
----------------------------------------------------
        
Average stats:

----------------------------------------------------
        Model: deepseek-coder:6.7b
        Performance Metrics:
            Prompt Processing:  2584.99 tokens/sec
            Generation Speed:   38.57 tokens/sec
            Combined Speed:     45.81 tokens/sec

        Workload Stats:
            Input Tokens:       83
            Generated Tokens:   434
            Model Load Time:    0.03s
            Processing Time:    0.03s
            Generation Time:    11.25s
            Total Time:         11.58s
----------------------------------------------------

Y este con un modelo mas pequeño, con unas velocidades mas que buenas:

----------------------------------------------------
        Model: deepseek-coder:1.3b
        Performance Metrics:
            Prompt Processing:  11296.10 tokens/sec
            Generation Speed:   159.41 tokens/sec
            Combined Speed:     188.48 tokens/sec

        Workload Stats:
            Input Tokens:       84
            Generated Tokens:   453
            Model Load Time:    0.08s
            Processing Time:    0.01s
            Generation Time:    2.84s
            Total Time:         3.53s
----------------------------------------------------
        
Average stats:

----------------------------------------------------
        Model: deepseek-coder:1.3b
        Performance Metrics:
            Prompt Processing:  11296.10 tokens/sec
            Generation Speed:   159.41 tokens/sec
            Combined Speed:     188.48 tokens/sec

        Workload Stats:
            Input Tokens:       84
            Generated Tokens:   453
            Model Load Time:    0.08s
            Processing Time:    0.01s
            Generation Time:    2.84s
            Total Time:         3.53s
----------------------------------------------------

Gracias por la lectura y espero que le sirva a alguien más. Un saludo Bears!!

Articulos del blog

Social

Portfolio

Github