128 lines
3.7 KiB
Docker
128 lines
3.7 KiB
Docker
FROM ubuntu:oracular AS ollama
|
|
|
|
# Get a couple prerequisites
|
|
RUN apt-get update \
|
|
&& DEBIAN_FRONTEND=noninteractive apt-get install -y \
|
|
gpg \
|
|
wget \
|
|
&& apt-get clean \
|
|
&& rm -rf /var/lib/apt/lists/{apt,dpkg,cache,log}
|
|
|
|
# Install Intel graphics runtimes
|
|
RUN apt-get update \
|
|
&& DEBIAN_FRONTEND=noninteractive apt-get install -y software-properties-common \
|
|
&& add-apt-repository -y ppa:kobuk-team/intel-graphics \
|
|
&& apt-get update \
|
|
&& DEBIAN_FRONTEND=noninteractive apt-get install -y \
|
|
libze-intel-gpu1 \
|
|
libze1 \
|
|
intel-ocloc \
|
|
intel-opencl-icd \
|
|
xpu-smi \
|
|
&& apt-get clean \
|
|
&& rm -rf /var/lib/apt/lists/{apt,dpkg,cache,log}
|
|
|
|
WORKDIR /opt/ollama
|
|
|
|
# Download the nightly ollama release from ipex-llm
|
|
|
|
# NOTE: NO longer at github.com/intel -- now at ipex-llm
|
|
|
|
# This version does not work:
|
|
ENV OLLAMA_VERSION=https://github.com/ipex-llm/ipex-llm/releases/download/v2.2.0/ollama-ipex-llm-2.2.0-ubuntu.tgz
|
|
|
|
|
|
# Does not work -- crashes
|
|
# ENV OLLAMA_VERSION=https://github.com/ipex-llm/ipex-llm/releases/download/v2.3.0-nightly/ollama-ipex-llm-2.3.0b20250612-ubuntu.tgz
|
|
|
|
RUN wget -qO - ${OLLAMA_VERSION} | \
|
|
tar --strip-components=1 -C . -xzv
|
|
|
|
# Install Python from Oracular (ollama works with 3.12)
|
|
RUN apt-get update \
|
|
&& DEBIAN_FRONTEND=noninteractive apt-get install -y \
|
|
gpg \
|
|
python3 \
|
|
python3-pip \
|
|
python3-venv \
|
|
wget \
|
|
&& apt-get clean \
|
|
&& rm -rf /var/lib/apt/lists/{apt,dpkg,cache,log}
|
|
|
|
# Setup the ollama python virtual environment
|
|
RUN python3 -m venv --system-site-packages /opt/ollama/venv
|
|
|
|
# Setup the docker pip shell
|
|
RUN { \
|
|
echo '#!/bin/bash' ; \
|
|
echo 'source /opt/ollama/venv/bin/activate' ; \
|
|
echo 'if [[ "${1}" != "" ]]; then bash -c "${@}"; else bash -i; fi' ; \
|
|
} > /opt/ollama/shell ; \
|
|
chmod +x /opt/ollama/shell
|
|
|
|
# Activate the pip environment on all shell calls
|
|
SHELL [ "/opt/ollama/shell" ]
|
|
|
|
# Install ollama python module
|
|
RUN pip install ollama langchain-ollama
|
|
|
|
SHELL [ "/bin/bash", "-c" ]
|
|
|
|
RUN { \
|
|
echo '#!/bin/bash'; \
|
|
echo 'echo "Container: ollama"'; \
|
|
echo 'set -e'; \
|
|
echo 'echo "Setting pip environment to /opt/ollama"'; \
|
|
echo 'source /opt/ollama/venv/bin/activate'; \
|
|
echo 'export OLLAMA_NUM_GPU=999'; \
|
|
echo 'export ZES_ENABLE_SYSMAN=1'; \
|
|
echo 'export SYCL_CACHE_PERSISTENT=1'; \
|
|
echo 'export OLLAMA_KEEP_ALIVE=-1'; \
|
|
echo 'export SYCL_PI_LEVEL_ZERO_USE_IMMEDIATE_COMMANDLISTS=1'; \
|
|
echo ''; \
|
|
echo 'if [[ "${1}" == "/bin/bash" ]] || [[ "${1}" =~ ^(/opt/ollama/)?shell$ ]]; then'; \
|
|
echo ' echo "Dropping to shell"'; \
|
|
echo ' shift'; \
|
|
echo ' if [[ "${1}" != "" ]]; then cmd="/opt/ollama/shell ${@}"; echo "Running: ${cmd}"; exec ${cmd}; else /opt/ollama/shell; fi'; \
|
|
echo 'else'; \
|
|
echo ' echo "Launching Ollama server..."'; \
|
|
echo ' exec ollama serve'; \
|
|
echo 'fi'; \
|
|
} > /entrypoint.sh \
|
|
&& chmod +x /entrypoint.sh
|
|
|
|
RUN { \
|
|
echo '#!/bin/bash'; \
|
|
echo 'echo "Container: ollama"'; \
|
|
echo 'set -e'; \
|
|
echo 'echo "Setting pip environment to /opt/ollama"'; \
|
|
echo 'source /opt/ollama/venv/bin/activate'; \
|
|
echo 'ollama pull qwen2.5:7b' ; \
|
|
echo 'ollama pull llama3.2' ; \
|
|
echo 'ollama pull mxbai-embed-large' ; \
|
|
echo 'ollama pull deepseek-r1:7b' ; \
|
|
echo 'ollama pull mistral:7b' ; \
|
|
} > /fetch-models.sh \
|
|
&& chmod +x /fetch-models.sh
|
|
|
|
ENV PYTHONUNBUFFERED=1
|
|
|
|
# Enable ext_intel_free_memory
|
|
ENV ZES_ENABLE_SYSMAN=1
|
|
|
|
# Use all GPUs
|
|
ENV OLLAMA_NUM_GPU=999
|
|
|
|
# Use immediate command lists
|
|
ENV SYCL_PI_LEVEL_ZERO_USE_IMMEDIATE_COMMANDLISTS=1
|
|
|
|
# Use persistent cache
|
|
ENV SYCL_CACHE_PERSISTENT=1
|
|
|
|
VOLUME [" /root/.ollama" ]
|
|
|
|
ENV PATH=/opt/ollama:${PATH}
|
|
|
|
ENTRYPOINT [ "/entrypoint.sh" ]
|
|
|