280 lines
8.3 KiB
Docker
280 lines
8.3 KiB
Docker
FROM ubuntu:oracular AS ze-monitor
|
|
# From https://github.com/jketreno/ze-monitor
|
|
RUN apt-get update \
|
|
&& DEBIAN_FRONTEND=noninteractive apt-get install -y \
|
|
build-essential \
|
|
debhelper \
|
|
devscripts \
|
|
cmake \
|
|
git \
|
|
libfmt-dev \
|
|
libncurses-dev \
|
|
rpm \
|
|
rpm2cpio \
|
|
&& apt-get clean \
|
|
&& rm -rf /var/lib/apt/lists/{apt,dpkg,cache,log}
|
|
|
|
RUN apt-get install -y \
|
|
software-properties-common \
|
|
&& add-apt-repository -y ppa:kobuk-team/intel-graphics \
|
|
&& apt-get update \
|
|
&& apt-get install -y \
|
|
libze-dev \
|
|
&& apt-get clean \
|
|
&& rm -rf /var/lib/apt/lists/{apt,dpkg,cache,log}
|
|
|
|
RUN git clone --depth 1 --branch v0.3.0-1 https://github.com/jketreno/ze-monitor /opt/ze-monitor
|
|
WORKDIR /opt/ze-monitor/build
|
|
RUN cmake .. \
|
|
&& make \
|
|
&& cpack
|
|
|
|
FROM ubuntu:oracular AS airc
|
|
|
|
# Get a couple prerequisites
|
|
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}
|
|
|
|
# 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/airc
|
|
|
|
# Setup the ollama python virtual environment
|
|
RUN python3 -m venv --system-site-packages /opt/airc/venv
|
|
|
|
# Setup the docker pip shell
|
|
RUN { \
|
|
echo '#!/bin/bash' ; \
|
|
echo 'source /opt/airc/venv/bin/activate' ; \
|
|
echo 'bash -c "${@}"' ; \
|
|
} > /opt/airc/shell ; \
|
|
chmod +x /opt/airc/shell
|
|
|
|
# Activate the pip environment on all shell calls
|
|
SHELL [ "/opt/airc/shell" ]
|
|
|
|
# Install ollama python module
|
|
RUN pip3 install ollama
|
|
# pydle does not work with newer asyncio due to coroutine
|
|
# being deprecated. Patch to work.
|
|
COPY /src/pydle.patch /opt/pydle.patch
|
|
|
|
RUN pip3 install pydle \
|
|
&& patch -d /opt/airc/venv/lib/python3*/site-packages/pydle \
|
|
-p1 < /opt/pydle.patch \
|
|
&& rm /opt/pydle.patch
|
|
|
|
RUN pip install setuptools --upgrade
|
|
RUN pip install ollama
|
|
RUN pip install feedparser bs4 chromadb
|
|
|
|
SHELL [ "/bin/bash", "-c" ]
|
|
|
|
RUN apt-get update \
|
|
&& DEBIAN_FRONTEND=noninteractive apt-get install -y \
|
|
libncurses6 \
|
|
&& apt-get clean \
|
|
&& rm -rf /var/lib/apt/lists/{apt,dpkg,cache,log}
|
|
|
|
COPY --from=ze-monitor /opt/ze-monitor/build/ze-monitor-*deb /opt/
|
|
RUN dpkg -i /opt/ze-monitor-*deb && rm /opt/ze-monitor-*deb
|
|
|
|
COPY /src/ /opt/airc/src/
|
|
|
|
SHELL [ "/bin/bash", "-c" ]
|
|
|
|
RUN { \
|
|
echo '#!/bin/bash'; \
|
|
echo 'echo "Container: airc"'; \
|
|
echo 'set -e'; \
|
|
echo 'echo "Setting pip environment to /opt/airc"'; \
|
|
echo 'source /opt/airc/venv/bin/activate'; \
|
|
echo ''; \
|
|
echo 'if [[ "${1}" == "/bin/bash" ]] || [[ "${1}" =~ ^(/opt/airc/)?shell$ ]]; then'; \
|
|
echo ' echo "Dropping to shell"'; \
|
|
echo ' shift' ; \
|
|
echo ' echo "Running: ${@}"' ; \
|
|
echo ' if [[ "${1}" != "" ]]; then' ; \
|
|
echo ' exec ${@}'; \
|
|
echo ' else' ; \
|
|
echo ' exec /bin/bash'; \
|
|
echo ' fi' ; \
|
|
echo 'else'; \
|
|
echo ' echo "Launching AIRC chat server..."'; \
|
|
echo ' python src/airc.py "${@}"' ; \
|
|
echo 'fi'; \
|
|
} > /entrypoint.sh \
|
|
&& chmod +x /entrypoint.sh
|
|
|
|
ENTRYPOINT [ "/entrypoint.sh" ]
|
|
|
|
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
|
|
RUN wget -qO - https://github.com/intel/ipex-llm/releases/download/v2.2.0-nightly/ollama-0.5.4-ipex-llm-2.2.0b20250226-ubuntu.tgz | \
|
|
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' ; \
|
|
update-alternatives --set python3 /opt/python/bin/python3.11 ; \
|
|
echo 'source /opt/ollama/venv/bin/activate' ; \
|
|
echo 'bash -c "${@}"' ; \
|
|
} > /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 pip3 install 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 ' exec /bin/bash'; \
|
|
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 mxbai-embed-large' ; \
|
|
echo './ollama pull deepseek-r1:7b' ; \
|
|
} > /fetch-models.sh \
|
|
&& chmod +x /fetch-models.sh
|
|
|
|
ENV PYTHONUNBUFFERED=1
|
|
|
|
VOLUME [" /root/.ollama" ]
|
|
|
|
ENTRYPOINT [ "/entrypoint.sh" ]
|
|
|
|
FROM airc AS jupyter
|
|
|
|
SHELL [ "/opt/airc/shell" ]
|
|
|
|
# BEGIN setup Jupyter
|
|
RUN pip install jupyter \
|
|
jupyterlab==4.3.0a0 \
|
|
jupyterhub==5.0.0 \
|
|
notebook==7.3.0a0 \
|
|
"jupyter-server-proxy>=4.1.2"
|
|
# END setup Jupyter
|
|
|
|
SHELL [ "/bin/bash", "-c" ]
|
|
|
|
RUN { \
|
|
echo '#!/bin/bash' ; \
|
|
echo 'echo "Container: airc jupyter"' ; \
|
|
echo 'if [[ ! -e "/root/.cache/hub/token" ]]; then' ; \
|
|
echo ' if [[ "${HF_ACCESS_TOKEN}" == "" ]]; then' ; \
|
|
echo ' echo "Set your HF access token in .env as: HF_ACCESS_TOKEN=<token>" >&2' ; \
|
|
echo ' exit 1' ; \
|
|
echo ' else' ; \
|
|
echo ' if [[ ! -d '/root/.cache/hub' ]]; then mkdir -p /root/.cache/hub; fi' ; \
|
|
echo ' echo "${HF_ACCESS_TOKEN}" > /root/.cache/hub/token' ; \
|
|
echo ' fi' ; \
|
|
echo 'fi' ; \
|
|
echo 'update-alternatives --set python3 /opt/python/bin/python3.11' ; \
|
|
echo 'if [[ -e /opt/intel/oneapi/setvars.sh ]]; then source /opt/intel/oneapi/setvars.sh; fi' ; \
|
|
echo 'source /opt/airc/venv/bin/activate' ; \
|
|
echo 'if [[ "${1}" == "shell" ]]; then echo "Dropping to shell"; /bin/bash; exit $?; fi' ; \
|
|
echo 'while true; do' ; \
|
|
echo ' echo "Launching jupyter notebook"' ; \
|
|
echo ' jupyter notebook \' ; \
|
|
echo ' --notebook-dir=/opt/jupyter \' ; \
|
|
echo ' --port 8888 \' ; \
|
|
echo ' --ip 0.0.0.0 \' ; \
|
|
echo ' --no-browser \' ; \
|
|
echo ' --allow-root \' ; \
|
|
echo ' --ServerApp.token= \' ; \
|
|
echo ' --ServerApp.password= \' ; \
|
|
echo ' --ServerApp.allow_origin=* \' ; \
|
|
echo ' --ServerApp.base_url="/jupyter" \' ; \
|
|
echo ' "${@}" \' ; \
|
|
echo ' 2>&1 | tee -a "/root/.cache/jupyter.log"' ; \
|
|
echo ' echo "jupyter notebook died ($?). Restarting."' ; \
|
|
echo ' sleep 5' ; \
|
|
echo 'done' ; \
|
|
} > /entrypoint-jupyter.sh \
|
|
&& chmod +x /entrypoint-jupyter.sh
|
|
|
|
ENTRYPOINT [ "/entrypoint-jupyter.sh" ] |