Μετάβαση στο περιεχόμενο

Περιγραφή

Ollama is a lightweight, extensible framework for building and running language models on the local machine. It provides a simple API for creating, running, and managing models, as well as a library of pre-built models that can be easily used in a variety of applications.

Ollama serve with GPU support (Ampere partition)

Το script υποβολής μίας εργασίας που χρησιμοποιεί το Ollama θα έχει την ακόλουθη μορφή:

SLURM submission script

Ollama-case.sh
#!/bin/bash
#SBATCH --job-name=Ollama-case
#SBATCH --partition=ampere
#SBATCH --time=20:00
#SBATCH --nodes=1
#SBATCH --gres=gpu:1
#SBATCH --output=output.log

module load ollama

# Create a temp directory
export TMPDIR=$SCRATCH/ollama_tmp
mkdir -p $TMPDIR

# Start Ollama service
ollama serve &> serve_ollama_${SLURM_JOBID}.log &

# Wait until Ollama service has been started
sleep 20

# Run Ollama using llama2 model
time ollama run llama2 "How do you schedule a job with slurm?"

# Terminate Ollama service
killall ollama

Στο $HOME μας στο login node, δημιουργούμε ένα νέο φάκελο όπου τοποθετούμε τα αρχεία εισόδου και το script υποβολής της εργασίας, έστω Ollama-case.sh.

# mkdir Ollama-case
# cd Ollama-case

Η υποβολή της εργασίας γίνεται με την εντολή sbatch <filename.sh> ως εξής:

# sbatch Ollama-case.sh

Παρακολουθούμε με την εντολή squeue την εξέλιξη της εργασίας.

Eφόσον η εργασία έχει εκκινήσει μπορούμε να παρακολουθήσουμε την απάντηση του μοντέλου μέσω των αρχείων εξόδου. Π.χ.:

# tail -f output.log

Ask a language model from Aristotle login node

Μπορούμε να ξεκινήσουμε το Ollama service σε ένα node της υπολογιστικής υποδομής και στην συνέχεια να υποβάλουμε τις ερωτήσεις μας από το login node. Για την εκκίνηση του Ollama μπορούμε να χρησιμοποιήσουμε το παρακάτω script:

Το script υποβολής μίας εργασίας που χρησιμοποιεί το Ollama θα έχει την ακόλουθη μορφή:

SLURM submission script

Ollama-serve.sh
#!/bin/bash
#SBATCH --job-name=Ollama-serve
#SBATCH --partition=ampere
#SBATCH --time=20:00
#SBATCH --nodes=1
#SBATCH --gres=gpu:1
#SBATCH --output=output.log

module load ollama

# Create a temp directory
export TMPDIR=$SCRATCH/ollama_tmp
mkdir -p $TMPDIR

# Set OLLAMA HOST
while :
do
   OLLAMA_PORT="`shuf -i 11430-11450 -n 1`"
   ss -lpna | grep -q ":$OLLAMA_PORT " || break
done
export OLLAMA_HOST=$(curl ip.me):$OLLAMA_PORT
echo "OLLAMA HOST: $OLLAMA_HOST"

# Start Ollama service
ollama serve | tee serve_ollama_${SLURM_JOBID}.log

Eφόσον η εργασία έχει εκκινήσει μπορούμε να υποβάλουμε ερωτήσεις στο μοντέλο που θα επιλέξουμε, ορίζοντας την μεταβλητή OLLAMA_HOST ώστε να αντιστοιχεί στην ip και στο port του server στον οποίο έχει εκκινήσει το Ollama. Για παράδειγμα:

[user@aristotle ]$ cat output.log
       OLLAMA HOST: 155.207.96.50:11438
[user@aristotle ]$ export OLLAMA_HOST=155.207.96.50:11438
[user@aristotle ]$ ollama run llama2
       >>> How do you schedule a job with slurm?
       >>> Why is the sky blue?
[user@aristotle ]$ ollama run mistral
       >>> Run a python script

Ollama serve on CPU only node

Για να ξεκινήσουμε το ollama σε CPU node μπορούμε να χρησιμοποιήσουμε το παρακάτω script.

SLURM submission script

Ollama-cpu-serve.sh
#!/bin/bash
#SBATCH --job-name=Ollama-cpu-serve
#SBATCH --partition=rome
#SBATCH --time=20:00
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=64
#SBATCH --extra-node-info=1:64
#SBATCH --output=output.log

module load ollama

# Create a temp directory
export TMPDIR=$SCRATCH/ollama_tmp
mkdir -p $TMPDIR

# Set OLLAMA HOST
while :
do
   OLLAMA_PORT="`shuf -i 11430-11450 -n 1`"
   ss -lpna | grep -q ":$OLLAMA_PORT " || break
done
export OLLAMA_HOST=$(curl ip.me):$OLLAMA_PORT
echo "OLLAMA HOST: $OLLAMA_HOST"

# Start Ollama service
ollama serve | tee serve_ollama_${SLURM_JOBID}.log

Για την καλύτερη απόδοση του ollama, σε περίπτωση που δεν δεσμεύουμε ένα ολόκληρο node, προσθέτουμε την επιλογή --extra-node-info=1:${NTASKS} Το συγκεκριμένο directive διασφαλίζει ότι η εργασία μας θα τρέχει σε ένα socket του επεξεργαστή, με σκοπό την πιο αποδοτική επικοινωνία των threads.

Install Ollama latest version locally

Για την εγκατάσταση της τελευταίας έκδοσης του Ollama στο $ΗΟΜΕ directory του λογαριασμού μας, μπορούμε να τρέξουμε τις παρακάτω εντολές:

mkdir -p $HOME/ollama/bin
curl -L https://ollama.com/download/ollama-linux-amd64 -o $HOME/ollama/bin/ollama
chmod +x $HOME/ollama/bin/ollama

Για να χρησιμοποιήσουμε την τοπική εγκατάσταση του Ollama, μπορούμε να αντικαταστήσουμε στα παραπάνω scripts υποβολής την εντολή module load ollama με την εξής εντολή: export PATH=$PATH:$HOME/ollama/bin