diff --git a/common/jupyter-environment.yml b/common/jupyter-environment.yml index 0d8eb4b..b315e38 100644 --- a/common/jupyter-environment.yml +++ b/common/jupyter-environment.yml @@ -8,8 +8,8 @@ dependencies: - isort - jupyter-server-proxy - jupyterlab-git - - jupyterlab=4.2 - - jupyter_ydoc=1.1.1 + - jupyterlab + - jupyter_ydoc - nbconvert - nbdime - nodejs @@ -25,4 +25,3 @@ dependencies: - jupyterlab_code_formatter - jupyterlab_execute_time - jupyterlab_widgets - diff --git a/common/jupyter-gpu-environment.yml b/common/jupyter-gpu-environment.yml index 7b1c745..0302ba9 100644 --- a/common/jupyter-gpu-environment.yml +++ b/common/jupyter-gpu-environment.yml @@ -8,8 +8,8 @@ dependencies: - isort - jupyter-server-proxy - jupyterlab-git - - jupyterlab=4.2 - - jupyter_ydoc=1.1.1 + - jupyterlab + - jupyter_ydoc - jupyterlab-nvdashboard - nbconvert - nbdime diff --git a/saturn-python-312-slim-gpu-12.9/.dockerignore b/saturn-python-312-slim-gpu-12.9/.dockerignore new file mode 100644 index 0000000..300378b --- /dev/null +++ b/saturn-python-312-slim-gpu-12.9/.dockerignore @@ -0,0 +1,2 @@ +* +!environment.yml \ No newline at end of file diff --git a/saturn-python-312-slim-gpu-12.9/.env_deps b/saturn-python-312-slim-gpu-12.9/.env_deps new file mode 100644 index 0000000..1249f6d --- /dev/null +++ b/saturn-python-312-slim-gpu-12.9/.env_deps @@ -0,0 +1,3 @@ +VERSION=2025.05.01 +SATURNBASE_GPU_IMAGE=public.ecr.aws/saturncloud/saturnbase-python-gpu-12.9:2025.05.01 +IMAGE=public.ecr.aws/saturncloud/saturn-python-slim-gpu:2025.05.01-cuda129-python312 \ No newline at end of file diff --git a/saturn-python-312-slim-gpu-12.9/Dockerfile b/saturn-python-312-slim-gpu-12.9/Dockerfile new file mode 100644 index 0000000..9998724 --- /dev/null +++ b/saturn-python-312-slim-gpu-12.9/Dockerfile @@ -0,0 +1,14 @@ +ARG SATURNBASE_GPU_IMAGE +FROM ${SATURNBASE_GPU_IMAGE} + +COPY environment.yml /tmp/environment.yml +RUN mamba env update -n saturn --file /tmp/environment.yml && \ + ${CONDA_DIR}/envs/saturn/bin/python -m ipykernel install \ + --name python3 \ + --display-name 'saturn (Python 3)' \ + --prefix=${CONDA_DIR} && \ + ${CONDA_DIR}/bin/conda clean -afy && \ + find ${CONDA_DIR} -type f,l -name '*.pyc' -delete && \ + find ${CONDA_DIR} -type f,l -name '*.a' -delete && \ + find ${CONDA_DIR} -type f,l -name '*.js.map' -delete +RUN echo '' > ${CONDA_DIR}/envs/saturn/conda-meta/history \ No newline at end of file diff --git a/saturn-python-312-slim-gpu-12.9/Makefile b/saturn-python-312-slim-gpu-12.9/Makefile new file mode 100644 index 0000000..fd2a20f --- /dev/null +++ b/saturn-python-312-slim-gpu-12.9/Makefile @@ -0,0 +1,9 @@ +include .env_deps +export + +build_image: + docker build \ + --no-cache \ + --build-arg SATURNBASE_GPU_IMAGE=${SATURNBASE_GPU_IMAGE} \ + -t ${IMAGE} \ + . \ No newline at end of file diff --git a/saturn-python-312-slim-gpu-12.9/environment.yml b/saturn-python-312-slim-gpu-12.9/environment.yml new file mode 100644 index 0000000..888c99e --- /dev/null +++ b/saturn-python-312-slim-gpu-12.9/environment.yml @@ -0,0 +1,8 @@ +name: saturn +channels: + - nodefaults + - conda-forge +dependencies: + - python=3.12 + - pip + - ipykernel \ No newline at end of file diff --git a/saturn-python-312-slim-gpu-12.9/recipe-template.json b/saturn-python-312-slim-gpu-12.9/recipe-template.json new file mode 100644 index 0000000..dacfbea --- /dev/null +++ b/saturn-python-312-slim-gpu-12.9/recipe-template.json @@ -0,0 +1,7 @@ +{ + "recipeName": "saturn-python-312-slim-gpu-12.9", + "description": "Python 3.12 GPU slim image with CUDA 12.9 and minimal packages", + "image": "saturncloud/saturn-python-slim-gpu:2025.05.01-cuda129-python312", + "gpu": true, + "saturnVersion": "2025.05.01" +} \ No newline at end of file diff --git a/saturn-python-312-slim/.dockerignore b/saturn-python-312-slim/.dockerignore new file mode 100644 index 0000000..300378b --- /dev/null +++ b/saturn-python-312-slim/.dockerignore @@ -0,0 +1,2 @@ +* +!environment.yml \ No newline at end of file diff --git a/saturn-python-312-slim/.env_deps b/saturn-python-312-slim/.env_deps new file mode 100644 index 0000000..2fb8f79 --- /dev/null +++ b/saturn-python-312-slim/.env_deps @@ -0,0 +1,3 @@ +VERSION=2025.05.01 +SATURNBASE_IMAGE=public.ecr.aws/saturncloud/saturnbase-python:2025.05.01 +IMAGE=public.ecr.aws/saturncloud/saturn-python-slim:2025.05.01-python312 \ No newline at end of file diff --git a/saturn-python-312-slim/Dockerfile b/saturn-python-312-slim/Dockerfile new file mode 100644 index 0000000..14e7a2d --- /dev/null +++ b/saturn-python-312-slim/Dockerfile @@ -0,0 +1,14 @@ +ARG SATURNBASE_IMAGE +FROM ${SATURNBASE_IMAGE} + +COPY environment.yml /tmp/environment.yml +RUN mamba env update -n saturn --file /tmp/environment.yml && \ + ${CONDA_DIR}/envs/saturn/bin/python -m ipykernel install \ + --name python3 \ + --display-name 'saturn (Python 3)' \ + --prefix=${CONDA_DIR} && \ + ${CONDA_DIR}/bin/conda clean -afy && \ + find ${CONDA_DIR} -type f,l -name '*.pyc' -delete && \ + find ${CONDA_DIR} -type f,l -name '*.a' -delete && \ + find ${CONDA_DIR} -type f,l -name '*.js.map' -delete +RUN echo '' > ${CONDA_DIR}/envs/saturn/conda-meta/history \ No newline at end of file diff --git a/saturn-python-312-slim/Makefile b/saturn-python-312-slim/Makefile new file mode 100644 index 0000000..2c2ce24 --- /dev/null +++ b/saturn-python-312-slim/Makefile @@ -0,0 +1,9 @@ +include .env_deps +export + +build_image: + docker build \ + --no-cache \ + --build-arg SATURNBASE_IMAGE=${SATURNBASE_IMAGE} \ + -t ${IMAGE} \ + . \ No newline at end of file diff --git a/saturn-python-312-slim/environment.yml b/saturn-python-312-slim/environment.yml new file mode 100644 index 0000000..888c99e --- /dev/null +++ b/saturn-python-312-slim/environment.yml @@ -0,0 +1,8 @@ +name: saturn +channels: + - nodefaults + - conda-forge +dependencies: + - python=3.12 + - pip + - ipykernel \ No newline at end of file diff --git a/saturn-python-312-slim/recipe-template.json b/saturn-python-312-slim/recipe-template.json new file mode 100644 index 0000000..6c6380e --- /dev/null +++ b/saturn-python-312-slim/recipe-template.json @@ -0,0 +1,7 @@ +{ + "recipeName": "saturn-python-312-slim", + "description": "Python 3.12 slim image with minimal packages", + "image": "saturncloud/saturn-python-slim:2025.05.01-python312", + "gpu": false, + "saturnVersion": "2025.05.01" +} \ No newline at end of file diff --git a/saturn-python-llm/environment.yml b/saturn-python-llm/environment.yml index 7cf9e04..6c1acda 100644 --- a/saturn-python-llm/environment.yml +++ b/saturn-python-llm/environment.yml @@ -1,47 +1,52 @@ name: saturn channels: - - pytorch - - rapidsai - - nvidia - - nodefaults - - conda-forge + - pytorch + - nvidia + - conda-forge + - defaults dependencies: - - blas=*=mkl + - python=3.11 - cuda-toolkit + - pytorch + - pytorch-cuda + - transformers + - tokenizers + - numpy + - psutil + - pydantic + - fastapi + - uvicorn + - aiohttp + - requests + - typing-extensions + - packaging + - filelock + - matplotlib + - pandas + - seaborn + - tqdm + - click + - rich + - tensorboard + - wandb - ipykernel - - ipywidgets - - pytorch=2.4.0 - - pytorch-cuda=12.1 - - faiss-gpu - pip - - python - pip: - - unsloth==2024.10.4 + - unsloth - vllm - - streamlit - - beautifulsoup4 - - scrapy - - transformers - - datasets - - sentencepiece - - sentence_transformers - - langchain - - bitsandbytes - - numpy + - ray + - sentence-transformers - accelerate - - mkl - - peft - - saturnfs + - bitsandbytes + - auto-gptq + - autoawq + - https://github.com/Dao-AILab/flash-attention/releases/download/v2.8.0.post2/flash_attn-2.8.0.post2%2Bcu12torch2.7cxx11abiTRUE-cp311-cp311-linux_x86_64.whl + - xformers + - gpustat + - nvidia-ml-py + - huggingface-hub + - black + - isort + - mypy + - pytest - saturn-client - - fsspec - - sseclient - - ruamel.yaml - - fastapi - - uvicorn - - mlflow - - pinecone - - langchain-community - - openai - - tiktoken - - pinecone-client - - langchain_pinecone diff --git a/saturn-python-pytorch/environment.yml b/saturn-python-pytorch/environment.yml index c2c6a78..b9cf4b8 100644 --- a/saturn-python-pytorch/environment.yml +++ b/saturn-python-pytorch/environment.yml @@ -24,7 +24,7 @@ dependencies: - pyarrow - python-graphviz - python - - pytorch::pytorch=2.4.0 + - pytorch::pytorch - s3fs - setuptools - tensorboard diff --git a/saturn-python-rapids/environment.yml b/saturn-python-rapids/environment.yml index 5bd2805..9a48ff7 100644 --- a/saturn-python-rapids/environment.yml +++ b/saturn-python-rapids/environment.yml @@ -22,7 +22,7 @@ dependencies: - pyarrow - python-graphviz - python - - rapids=24.06 + - rapids - s3fs - scikit-learn - scipy diff --git a/saturn-python-tensorflow/environment.yml b/saturn-python-tensorflow/environment.yml index 9a8fc1f..eecf295 100644 --- a/saturn-python-tensorflow/environment.yml +++ b/saturn-python-tensorflow/environment.yml @@ -25,7 +25,7 @@ dependencies: - voila - pynvml - pip: - - dask-saturn==0.4.4 + - dask-saturn - saturn-client - saturnfs - snowflake-connector-python diff --git a/saturnbase-python-amd-gpu-devel/.dockerignore b/saturnbase-python-amd-gpu-devel/.dockerignore new file mode 100644 index 0000000..75941cb --- /dev/null +++ b/saturnbase-python-amd-gpu-devel/.dockerignore @@ -0,0 +1,5 @@ +* +!environment.yml +!install-jupyter.bash +!install-miniconda.bash +!profile \ No newline at end of file diff --git a/saturnbase-python-amd-gpu-devel/.env_deps b/saturnbase-python-amd-gpu-devel/.env_deps new file mode 100644 index 0000000..013bae1 --- /dev/null +++ b/saturnbase-python-amd-gpu-devel/.env_deps @@ -0,0 +1,2 @@ +VERSION=2025.05.01 +IMAGE=public.ecr.aws/saturncloud/saturnbase-python-amd-gpu-devel:2025.05.01 \ No newline at end of file diff --git a/saturnbase-python-amd-gpu-devel/Dockerfile b/saturnbase-python-amd-gpu-devel/Dockerfile new file mode 100644 index 0000000..0f17388 --- /dev/null +++ b/saturnbase-python-amd-gpu-devel/Dockerfile @@ -0,0 +1,78 @@ +FROM rocm/dev-ubuntu-22.04:7.0 +EXPOSE 8888 + + +ENV CONDA_DIR=/opt/saturncloud +ENV CONDA_BIN=${CONDA_DIR}/bin +ENV DEBIAN_FRONTEND=noninteractive +RUN apt-get -qq --allow-releaseinfo-change update && \ + apt-get -qq upgrade -y && \ + apt-get -qq install --yes --no-install-recommends \ + awscli \ + dumb-init \ + build-essential \ + bzip2 \ + ca-certificates \ + curl \ + file \ + gettext-base \ + git \ + gnupg \ + htop \ + libnuma-dev \ + locales \ + openssh-server \ + rsync \ + screen \ + ssh \ + sudo \ + unzip \ + wget \ + zip \ + > /dev/null && \ + apt-get -qq purge && \ + apt-get -qq clean && \ + rm -rf /var/lib/apt/lists/* && \ + mkdir -p /run/sshd && \ + chmod 755 /run/sshd && \ + echo "en_US.UTF-8 UTF-8" > /etc/locale.gen && \ + locale-gen +ENV LC_ALL en_US.UTF-8 +ENV LANG en_US.UTF-8 +ENV LANGUAGE en_US.UTF-8 +ENV SHELL /bin/bash +ENV NB_USER=jovyan +ENV NB_UID=1000 + +COPY install-miniconda.bash /tmp/install-miniconda.bash +RUN bash /tmp/install-miniconda.bash + +ENV USER=${NB_USER} +ENV HOME=/home/${NB_USER} + +RUN adduser --disabled-password \ + --gecos "Default user" \ + --uid ${NB_UID} \ + ${NB_USER} && \ + echo "$NB_USER ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/notebook && \ + chown 1000:1000 -R /opt/saturncloud + +COPY profile /etc/profile + +USER ${NB_USER} + + +COPY install-jupyter.bash /tmp/install-jupyter.bash +COPY environment.yml /tmp/environment.yml +RUN bash /tmp/install-jupyter.bash && \ + echo '' > ${CONDA_DIR}/conda-meta/history && \ + ${CONDA_BIN}/conda config --system --add channels conda-forge && \ + ${CONDA_BIN}/conda config --system --set auto_update_conda false && \ + ${CONDA_BIN}/conda config --system --set show_channel_urls true +ENV NB_PYTHON_PREFIX ${CONDA_DIR}/envs/saturn +ENV PATH ${NB_PYTHON_PREFIX}/bin:${CONDA_BIN}:${HOME}/.local/bin:${PATH} +WORKDIR ${HOME} +ENTRYPOINT [] + +RUN sudo ln -s /opt/saturncloud /opt/conda && \ + sudo ln -s /opt/saturncloud /srv/conda \ No newline at end of file diff --git a/saturnbase-python-amd-gpu-devel/Makefile b/saturnbase-python-amd-gpu-devel/Makefile new file mode 100644 index 0000000..619b4f6 --- /dev/null +++ b/saturnbase-python-amd-gpu-devel/Makefile @@ -0,0 +1,9 @@ +include .env_deps +export + +build_image: + docker build \ + --no-cache \ + --build-arg JUPYTER_SATURN_VERSION=${JUPYTER_SATURN_VERSION} \ + -t ${IMAGE} \ + . \ No newline at end of file diff --git a/saturnbase-python-amd-gpu-devel/environment.yml b/saturnbase-python-amd-gpu-devel/environment.yml new file mode 100644 index 0000000..0302ba9 --- /dev/null +++ b/saturnbase-python-amd-gpu-devel/environment.yml @@ -0,0 +1,28 @@ +channels: + - conda-forge +dependencies: + - black + - dask-core + - distributed + - ipywidgets + - isort + - jupyter-server-proxy + - jupyterlab-git + - jupyterlab + - jupyter_ydoc + - jupyterlab-nvdashboard + - nbconvert + - nbdime + - nodejs + - notebook + - pip + - pyviz_comms + - tornado + - voila + - yarl + - pip: + - jupyter_server + - jupyter_bokeh + - jupyterlab_code_formatter + - jupyterlab_execute_time + - jupyterlab_widgets diff --git a/saturnbase-python-amd-gpu-devel/install-jupyter.bash b/saturnbase-python-amd-gpu-devel/install-jupyter.bash new file mode 100644 index 0000000..97646ce --- /dev/null +++ b/saturnbase-python-amd-gpu-devel/install-jupyter.bash @@ -0,0 +1,17 @@ +#!/bin/bash + +set -ex +export PATH="${CONDA_BIN}:${PATH}" + +cd $(dirname $0) + +echo "installing root env:" +cat /tmp/environment.yml +mamba env update -n base -f /tmp/environment.yml +conda clean -afy +jupyter lab clean +find ${CONDA_DIR}/ -type f,l -name '*.a' -delete +find ${CONDA_DIR}/ -type f,l -name '*.js.map' -delete +rm -rf $HOME/.local + +conda create -n saturn diff --git a/saturnbase-python-amd-gpu-devel/install-miniconda.bash b/saturnbase-python-amd-gpu-devel/install-miniconda.bash new file mode 100644 index 0000000..a729ef9 --- /dev/null +++ b/saturnbase-python-amd-gpu-devel/install-miniconda.bash @@ -0,0 +1,18 @@ +#!/bin/bash +cd /tmp + +set -x && \ + MINICONDA_URL="https://repo.anaconda.com/miniconda/Miniconda3-py311_24.4.0-0-Linux-x86_64.sh"; \ + SHA256SUM="7cb030a12d1da35e1c548344a895b108e0d2fbdc4f6b67d5180b2ac8539cc473"; \ + wget "${MINICONDA_URL}" -O miniconda.sh -q && \ + echo "${SHA256SUM} miniconda.sh" > shasum && \ + sha256sum --check --status shasum && \ + mkdir -p /opt && \ + sh miniconda.sh -b -p /opt/saturncloud && \ + rm miniconda.sh shasum && \ + /opt/saturncloud/bin/conda install -n base --override-channels -c conda-forge mamba==1.5.10 'python_abi=*=*cp*' --yes + ln -s /opt/saturncloud/etc/profile.d/conda.sh /etc/profile.d/conda.sh && \ + find /opt/saturncloud/ -follow -type f -name '*.a' -delete && \ + find /opt/saturncloud/ -follow -type f -name '*.js.map' -delete && \ + /opt/saturncloud/bin/conda clean -afy && \ + chown -R 1000:1000 /opt/saturncloud \ No newline at end of file diff --git a/saturnbase-python-amd-gpu-devel/profile b/saturnbase-python-amd-gpu-devel/profile new file mode 100644 index 0000000..617f39d --- /dev/null +++ b/saturnbase-python-amd-gpu-devel/profile @@ -0,0 +1,23 @@ +if [ "${PS1-}" ]; then + if [ "${BASH-}" ] && [ "$BASH" != "/bin/sh" ]; then + # The file bash.bashrc already sets the default PS1. + # PS1='\h:\w\$ ' + if [ -f /etc/bash.bashrc ]; then + . /etc/bash.bashrc + fi + else + if [ "`id -u`" -eq 0 ]; then + PS1='# ' + else + PS1='$ ' + fi + fi +fi +if [ -d /etc/profile.d ]; then + for i in /etc/profile.d/*.sh; do + if [ -r $i ]; then + . $i + fi + done + unset i +fi \ No newline at end of file diff --git a/saturnbase-python-amd-gpu-devel/recipe-template.json b/saturnbase-python-amd-gpu-devel/recipe-template.json new file mode 100644 index 0000000..e2e852e --- /dev/null +++ b/saturnbase-python-amd-gpu-devel/recipe-template.json @@ -0,0 +1,7 @@ +{ + "recipeName": "saturnbase-python-amd-gpu-devel", + "description": "Saturn base Python GPU devel image with rocm7 development tools", + "image": "saturncloud/saturnbase-python-amd-gpu-devel:2025.05.01", + "gpu": true, + "saturnVersion": "2025.05.01" +} \ No newline at end of file diff --git a/saturnbase-python-gpu-11.8/environment.yml b/saturnbase-python-gpu-11.8/environment.yml index 7b1c745..0302ba9 100644 --- a/saturnbase-python-gpu-11.8/environment.yml +++ b/saturnbase-python-gpu-11.8/environment.yml @@ -8,8 +8,8 @@ dependencies: - isort - jupyter-server-proxy - jupyterlab-git - - jupyterlab=4.2 - - jupyter_ydoc=1.1.1 + - jupyterlab + - jupyter_ydoc - jupyterlab-nvdashboard - nbconvert - nbdime diff --git a/saturnbase-python-gpu-12.1/environment.yml b/saturnbase-python-gpu-12.1/environment.yml index 7b1c745..0302ba9 100644 --- a/saturnbase-python-gpu-12.1/environment.yml +++ b/saturnbase-python-gpu-12.1/environment.yml @@ -8,8 +8,8 @@ dependencies: - isort - jupyter-server-proxy - jupyterlab-git - - jupyterlab=4.2 - - jupyter_ydoc=1.1.1 + - jupyterlab + - jupyter_ydoc - jupyterlab-nvdashboard - nbconvert - nbdime diff --git a/saturnbase-python-gpu-12.9/.dockerignore b/saturnbase-python-gpu-12.9/.dockerignore new file mode 100644 index 0000000..75941cb --- /dev/null +++ b/saturnbase-python-gpu-12.9/.dockerignore @@ -0,0 +1,5 @@ +* +!environment.yml +!install-jupyter.bash +!install-miniconda.bash +!profile \ No newline at end of file diff --git a/saturnbase-python-gpu-12.9/.env_deps b/saturnbase-python-gpu-12.9/.env_deps new file mode 100644 index 0000000..e2dcf5e --- /dev/null +++ b/saturnbase-python-gpu-12.9/.env_deps @@ -0,0 +1,2 @@ +VERSION=2025.05.01 +IMAGE=public.ecr.aws/saturncloud/saturnbase-python-gpu-12.9:2025.05.01 \ No newline at end of file diff --git a/saturnbase-python-gpu-12.9/Dockerfile b/saturnbase-python-gpu-12.9/Dockerfile new file mode 100644 index 0000000..f600452 --- /dev/null +++ b/saturnbase-python-gpu-12.9/Dockerfile @@ -0,0 +1,79 @@ +FROM nvidia/cuda:12.9.1-cudnn-runtime-ubuntu22.04 +ENV CONDA_OVERRIDE_CUDA=12.9 +EXPOSE 8888 + + +ENV CONDA_DIR=/opt/saturncloud +ENV CONDA_BIN=${CONDA_DIR}/bin +ENV DEBIAN_FRONTEND=noninteractive +RUN apt-get -qq --allow-releaseinfo-change update && \ + apt-get -qq upgrade -y && \ + apt-get -qq install --yes --no-install-recommends \ + awscli \ + dumb-init \ + build-essential \ + bzip2 \ + ca-certificates \ + curl \ + file \ + gettext-base \ + git \ + gnupg \ + htop \ + libnuma-dev \ + locales \ + openssh-server \ + rsync \ + screen \ + ssh \ + sudo \ + unzip \ + wget \ + zip \ + > /dev/null && \ + apt-get -qq purge && \ + apt-get -qq clean && \ + rm -rf /var/lib/apt/lists/* && \ + mkdir -p /run/sshd && \ + chmod 755 /run/sshd && \ + echo "en_US.UTF-8 UTF-8" > /etc/locale.gen && \ + locale-gen +ENV LC_ALL en_US.UTF-8 +ENV LANG en_US.UTF-8 +ENV LANGUAGE en_US.UTF-8 +ENV SHELL /bin/bash +ENV NB_USER=jovyan +ENV NB_UID=1000 + +COPY install-miniconda.bash /tmp/install-miniconda.bash +RUN bash /tmp/install-miniconda.bash + +ENV USER=${NB_USER} +ENV HOME=/home/${NB_USER} + +RUN adduser --disabled-password \ + --gecos "Default user" \ + --uid ${NB_UID} \ + ${NB_USER} && \ + echo "$NB_USER ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/notebook && \ + chown 1000:1000 -R /opt/saturncloud + +COPY profile /etc/profile + +USER ${NB_USER} + + +COPY install-jupyter.bash /tmp/install-jupyter.bash +COPY environment.yml /tmp/environment.yml +RUN bash /tmp/install-jupyter.bash && \ + echo '' > ${CONDA_DIR}/conda-meta/history && \ + ${CONDA_BIN}/conda config --system --add channels conda-forge && \ + ${CONDA_BIN}/conda config --system --set auto_update_conda false && \ + ${CONDA_BIN}/conda config --system --set show_channel_urls true +ENV NB_PYTHON_PREFIX ${CONDA_DIR}/envs/saturn +ENV PATH ${NB_PYTHON_PREFIX}/bin:${CONDA_BIN}:${HOME}/.local/bin:${PATH} +WORKDIR ${HOME} +ENTRYPOINT [] + +RUN sudo ln -s /opt/saturncloud /opt/conda && \ + sudo ln -s /opt/saturncloud /srv/conda \ No newline at end of file diff --git a/saturnbase-python-gpu-12.9/Makefile b/saturnbase-python-gpu-12.9/Makefile new file mode 100644 index 0000000..619b4f6 --- /dev/null +++ b/saturnbase-python-gpu-12.9/Makefile @@ -0,0 +1,9 @@ +include .env_deps +export + +build_image: + docker build \ + --no-cache \ + --build-arg JUPYTER_SATURN_VERSION=${JUPYTER_SATURN_VERSION} \ + -t ${IMAGE} \ + . \ No newline at end of file diff --git a/saturnbase-python-gpu-12.9/environment.yml b/saturnbase-python-gpu-12.9/environment.yml new file mode 100644 index 0000000..0302ba9 --- /dev/null +++ b/saturnbase-python-gpu-12.9/environment.yml @@ -0,0 +1,28 @@ +channels: + - conda-forge +dependencies: + - black + - dask-core + - distributed + - ipywidgets + - isort + - jupyter-server-proxy + - jupyterlab-git + - jupyterlab + - jupyter_ydoc + - jupyterlab-nvdashboard + - nbconvert + - nbdime + - nodejs + - notebook + - pip + - pyviz_comms + - tornado + - voila + - yarl + - pip: + - jupyter_server + - jupyter_bokeh + - jupyterlab_code_formatter + - jupyterlab_execute_time + - jupyterlab_widgets diff --git a/saturnbase-python-gpu-12.9/install-jupyter.bash b/saturnbase-python-gpu-12.9/install-jupyter.bash new file mode 100644 index 0000000..97646ce --- /dev/null +++ b/saturnbase-python-gpu-12.9/install-jupyter.bash @@ -0,0 +1,17 @@ +#!/bin/bash + +set -ex +export PATH="${CONDA_BIN}:${PATH}" + +cd $(dirname $0) + +echo "installing root env:" +cat /tmp/environment.yml +mamba env update -n base -f /tmp/environment.yml +conda clean -afy +jupyter lab clean +find ${CONDA_DIR}/ -type f,l -name '*.a' -delete +find ${CONDA_DIR}/ -type f,l -name '*.js.map' -delete +rm -rf $HOME/.local + +conda create -n saturn diff --git a/saturnbase-python-gpu-12.9/install-miniconda.bash b/saturnbase-python-gpu-12.9/install-miniconda.bash new file mode 100644 index 0000000..a729ef9 --- /dev/null +++ b/saturnbase-python-gpu-12.9/install-miniconda.bash @@ -0,0 +1,18 @@ +#!/bin/bash +cd /tmp + +set -x && \ + MINICONDA_URL="https://repo.anaconda.com/miniconda/Miniconda3-py311_24.4.0-0-Linux-x86_64.sh"; \ + SHA256SUM="7cb030a12d1da35e1c548344a895b108e0d2fbdc4f6b67d5180b2ac8539cc473"; \ + wget "${MINICONDA_URL}" -O miniconda.sh -q && \ + echo "${SHA256SUM} miniconda.sh" > shasum && \ + sha256sum --check --status shasum && \ + mkdir -p /opt && \ + sh miniconda.sh -b -p /opt/saturncloud && \ + rm miniconda.sh shasum && \ + /opt/saturncloud/bin/conda install -n base --override-channels -c conda-forge mamba==1.5.10 'python_abi=*=*cp*' --yes + ln -s /opt/saturncloud/etc/profile.d/conda.sh /etc/profile.d/conda.sh && \ + find /opt/saturncloud/ -follow -type f -name '*.a' -delete && \ + find /opt/saturncloud/ -follow -type f -name '*.js.map' -delete && \ + /opt/saturncloud/bin/conda clean -afy && \ + chown -R 1000:1000 /opt/saturncloud \ No newline at end of file diff --git a/saturnbase-python-gpu-12.9/profile b/saturnbase-python-gpu-12.9/profile new file mode 100644 index 0000000..617f39d --- /dev/null +++ b/saturnbase-python-gpu-12.9/profile @@ -0,0 +1,23 @@ +if [ "${PS1-}" ]; then + if [ "${BASH-}" ] && [ "$BASH" != "/bin/sh" ]; then + # The file bash.bashrc already sets the default PS1. + # PS1='\h:\w\$ ' + if [ -f /etc/bash.bashrc ]; then + . /etc/bash.bashrc + fi + else + if [ "`id -u`" -eq 0 ]; then + PS1='# ' + else + PS1='$ ' + fi + fi +fi +if [ -d /etc/profile.d ]; then + for i in /etc/profile.d/*.sh; do + if [ -r $i ]; then + . $i + fi + done + unset i +fi \ No newline at end of file diff --git a/saturnbase-python-gpu-12.9/recipe-template.json b/saturnbase-python-gpu-12.9/recipe-template.json new file mode 100644 index 0000000..d24f9a5 --- /dev/null +++ b/saturnbase-python-gpu-12.9/recipe-template.json @@ -0,0 +1,7 @@ +{ + "recipeName": "saturnbase-python-gpu-12.9", + "description": "Saturn base Python GPU image with CUDA 12.9", + "image": "saturncloud/saturnbase-python-gpu-12.9:2025.05.01", + "gpu": true, + "saturnVersion": "2025.05.01" +} \ No newline at end of file diff --git a/saturnbase-python-gpu-devel-11.8/environment.yml b/saturnbase-python-gpu-devel-11.8/environment.yml index 7b1c745..0302ba9 100644 --- a/saturnbase-python-gpu-devel-11.8/environment.yml +++ b/saturnbase-python-gpu-devel-11.8/environment.yml @@ -8,8 +8,8 @@ dependencies: - isort - jupyter-server-proxy - jupyterlab-git - - jupyterlab=4.2 - - jupyter_ydoc=1.1.1 + - jupyterlab + - jupyter_ydoc - jupyterlab-nvdashboard - nbconvert - nbdime diff --git a/saturnbase-python-gpu-devel-12.1/environment.yml b/saturnbase-python-gpu-devel-12.1/environment.yml index 7b1c745..0302ba9 100644 --- a/saturnbase-python-gpu-devel-12.1/environment.yml +++ b/saturnbase-python-gpu-devel-12.1/environment.yml @@ -8,8 +8,8 @@ dependencies: - isort - jupyter-server-proxy - jupyterlab-git - - jupyterlab=4.2 - - jupyter_ydoc=1.1.1 + - jupyterlab + - jupyter_ydoc - jupyterlab-nvdashboard - nbconvert - nbdime diff --git a/saturnbase-python-gpu-devel-12.9/.dockerignore b/saturnbase-python-gpu-devel-12.9/.dockerignore new file mode 100644 index 0000000..75941cb --- /dev/null +++ b/saturnbase-python-gpu-devel-12.9/.dockerignore @@ -0,0 +1,5 @@ +* +!environment.yml +!install-jupyter.bash +!install-miniconda.bash +!profile \ No newline at end of file diff --git a/saturnbase-python-gpu-devel-12.9/.env_deps b/saturnbase-python-gpu-devel-12.9/.env_deps new file mode 100644 index 0000000..744514d --- /dev/null +++ b/saturnbase-python-gpu-devel-12.9/.env_deps @@ -0,0 +1,2 @@ +VERSION=2025.05.01 +IMAGE=public.ecr.aws/saturncloud/saturnbase-python-gpu-devel-12.9:2025.05.01 \ No newline at end of file diff --git a/saturnbase-python-gpu-devel-12.9/Dockerfile b/saturnbase-python-gpu-devel-12.9/Dockerfile new file mode 100644 index 0000000..2de18cf --- /dev/null +++ b/saturnbase-python-gpu-devel-12.9/Dockerfile @@ -0,0 +1,79 @@ +FROM nvidia/cuda:12.9.1-cudnn-devel-ubuntu22.04 +ENV CONDA_OVERRIDE_CUDA=12.9 +EXPOSE 8888 + + +ENV CONDA_DIR=/opt/saturncloud +ENV CONDA_BIN=${CONDA_DIR}/bin +ENV DEBIAN_FRONTEND=noninteractive +RUN apt-get -qq --allow-releaseinfo-change update && \ + apt-get -qq upgrade -y && \ + apt-get -qq install --yes --no-install-recommends \ + awscli \ + dumb-init \ + build-essential \ + bzip2 \ + ca-certificates \ + curl \ + file \ + gettext-base \ + git \ + gnupg \ + htop \ + libnuma-dev \ + locales \ + openssh-server \ + rsync \ + screen \ + ssh \ + sudo \ + unzip \ + wget \ + zip \ + > /dev/null && \ + apt-get -qq purge && \ + apt-get -qq clean && \ + rm -rf /var/lib/apt/lists/* && \ + mkdir -p /run/sshd && \ + chmod 755 /run/sshd && \ + echo "en_US.UTF-8 UTF-8" > /etc/locale.gen && \ + locale-gen +ENV LC_ALL en_US.UTF-8 +ENV LANG en_US.UTF-8 +ENV LANGUAGE en_US.UTF-8 +ENV SHELL /bin/bash +ENV NB_USER=jovyan +ENV NB_UID=1000 + +COPY install-miniconda.bash /tmp/install-miniconda.bash +RUN bash /tmp/install-miniconda.bash + +ENV USER=${NB_USER} +ENV HOME=/home/${NB_USER} + +RUN adduser --disabled-password \ + --gecos "Default user" \ + --uid ${NB_UID} \ + ${NB_USER} && \ + echo "$NB_USER ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/notebook && \ + chown 1000:1000 -R /opt/saturncloud + +COPY profile /etc/profile + +USER ${NB_USER} + + +COPY install-jupyter.bash /tmp/install-jupyter.bash +COPY environment.yml /tmp/environment.yml +RUN bash /tmp/install-jupyter.bash && \ + echo '' > ${CONDA_DIR}/conda-meta/history && \ + ${CONDA_BIN}/conda config --system --add channels conda-forge && \ + ${CONDA_BIN}/conda config --system --set auto_update_conda false && \ + ${CONDA_BIN}/conda config --system --set show_channel_urls true +ENV NB_PYTHON_PREFIX ${CONDA_DIR}/envs/saturn +ENV PATH ${NB_PYTHON_PREFIX}/bin:${CONDA_BIN}:${HOME}/.local/bin:${PATH} +WORKDIR ${HOME} +ENTRYPOINT [] + +RUN sudo ln -s /opt/saturncloud /opt/conda && \ + sudo ln -s /opt/saturncloud /srv/conda \ No newline at end of file diff --git a/saturnbase-python-gpu-devel-12.9/Makefile b/saturnbase-python-gpu-devel-12.9/Makefile new file mode 100644 index 0000000..619b4f6 --- /dev/null +++ b/saturnbase-python-gpu-devel-12.9/Makefile @@ -0,0 +1,9 @@ +include .env_deps +export + +build_image: + docker build \ + --no-cache \ + --build-arg JUPYTER_SATURN_VERSION=${JUPYTER_SATURN_VERSION} \ + -t ${IMAGE} \ + . \ No newline at end of file diff --git a/saturnbase-python-gpu-devel-12.9/environment.yml b/saturnbase-python-gpu-devel-12.9/environment.yml new file mode 100644 index 0000000..0302ba9 --- /dev/null +++ b/saturnbase-python-gpu-devel-12.9/environment.yml @@ -0,0 +1,28 @@ +channels: + - conda-forge +dependencies: + - black + - dask-core + - distributed + - ipywidgets + - isort + - jupyter-server-proxy + - jupyterlab-git + - jupyterlab + - jupyter_ydoc + - jupyterlab-nvdashboard + - nbconvert + - nbdime + - nodejs + - notebook + - pip + - pyviz_comms + - tornado + - voila + - yarl + - pip: + - jupyter_server + - jupyter_bokeh + - jupyterlab_code_formatter + - jupyterlab_execute_time + - jupyterlab_widgets diff --git a/saturnbase-python-gpu-devel-12.9/install-jupyter.bash b/saturnbase-python-gpu-devel-12.9/install-jupyter.bash new file mode 100644 index 0000000..97646ce --- /dev/null +++ b/saturnbase-python-gpu-devel-12.9/install-jupyter.bash @@ -0,0 +1,17 @@ +#!/bin/bash + +set -ex +export PATH="${CONDA_BIN}:${PATH}" + +cd $(dirname $0) + +echo "installing root env:" +cat /tmp/environment.yml +mamba env update -n base -f /tmp/environment.yml +conda clean -afy +jupyter lab clean +find ${CONDA_DIR}/ -type f,l -name '*.a' -delete +find ${CONDA_DIR}/ -type f,l -name '*.js.map' -delete +rm -rf $HOME/.local + +conda create -n saturn diff --git a/saturnbase-python-gpu-devel-12.9/install-miniconda.bash b/saturnbase-python-gpu-devel-12.9/install-miniconda.bash new file mode 100644 index 0000000..a729ef9 --- /dev/null +++ b/saturnbase-python-gpu-devel-12.9/install-miniconda.bash @@ -0,0 +1,18 @@ +#!/bin/bash +cd /tmp + +set -x && \ + MINICONDA_URL="https://repo.anaconda.com/miniconda/Miniconda3-py311_24.4.0-0-Linux-x86_64.sh"; \ + SHA256SUM="7cb030a12d1da35e1c548344a895b108e0d2fbdc4f6b67d5180b2ac8539cc473"; \ + wget "${MINICONDA_URL}" -O miniconda.sh -q && \ + echo "${SHA256SUM} miniconda.sh" > shasum && \ + sha256sum --check --status shasum && \ + mkdir -p /opt && \ + sh miniconda.sh -b -p /opt/saturncloud && \ + rm miniconda.sh shasum && \ + /opt/saturncloud/bin/conda install -n base --override-channels -c conda-forge mamba==1.5.10 'python_abi=*=*cp*' --yes + ln -s /opt/saturncloud/etc/profile.d/conda.sh /etc/profile.d/conda.sh && \ + find /opt/saturncloud/ -follow -type f -name '*.a' -delete && \ + find /opt/saturncloud/ -follow -type f -name '*.js.map' -delete && \ + /opt/saturncloud/bin/conda clean -afy && \ + chown -R 1000:1000 /opt/saturncloud \ No newline at end of file diff --git a/saturnbase-python-gpu-devel-12.9/profile b/saturnbase-python-gpu-devel-12.9/profile new file mode 100644 index 0000000..617f39d --- /dev/null +++ b/saturnbase-python-gpu-devel-12.9/profile @@ -0,0 +1,23 @@ +if [ "${PS1-}" ]; then + if [ "${BASH-}" ] && [ "$BASH" != "/bin/sh" ]; then + # The file bash.bashrc already sets the default PS1. + # PS1='\h:\w\$ ' + if [ -f /etc/bash.bashrc ]; then + . /etc/bash.bashrc + fi + else + if [ "`id -u`" -eq 0 ]; then + PS1='# ' + else + PS1='$ ' + fi + fi +fi +if [ -d /etc/profile.d ]; then + for i in /etc/profile.d/*.sh; do + if [ -r $i ]; then + . $i + fi + done + unset i +fi \ No newline at end of file diff --git a/saturnbase-python-gpu-devel-12.9/recipe-template.json b/saturnbase-python-gpu-devel-12.9/recipe-template.json new file mode 100644 index 0000000..ed969d0 --- /dev/null +++ b/saturnbase-python-gpu-devel-12.9/recipe-template.json @@ -0,0 +1,7 @@ +{ + "recipeName": "saturnbase-python-gpu-devel-12.9", + "description": "Saturn base Python GPU devel image with CUDA 12.9 development tools", + "image": "saturncloud/saturnbase-python-gpu-devel-12.9:2025.05.01", + "gpu": true, + "saturnVersion": "2025.05.01" +} \ No newline at end of file diff --git a/saturnbase-python/environment.yml b/saturnbase-python/environment.yml index 0d8eb4b..b315e38 100644 --- a/saturnbase-python/environment.yml +++ b/saturnbase-python/environment.yml @@ -8,8 +8,8 @@ dependencies: - isort - jupyter-server-proxy - jupyterlab-git - - jupyterlab=4.2 - - jupyter_ydoc=1.1.1 + - jupyterlab + - jupyter_ydoc - nbconvert - nbdime - nodejs @@ -25,4 +25,3 @@ dependencies: - jupyterlab_code_formatter - jupyterlab_execute_time - jupyterlab_widgets - diff --git a/saturnbase-r-bioconductor/Dockerfile b/saturnbase-r-bioconductor/Dockerfile index 24479db..f023f76 100644 --- a/saturnbase-r-bioconductor/Dockerfile +++ b/saturnbase-r-bioconductor/Dockerfile @@ -1,4 +1,4 @@ -FROM bioconductor/bioconductor_docker:RELEASE_3_19 +FROM bioconductor/bioconductor_docker:RELEASE_3_21 RUN usermod -l jovyan rstudio && \ groupmod -n jovyan rstudio && \ usermod -d /home/jovyan jovyan && \ @@ -38,7 +38,6 @@ RUN apt-get -qq --allow-releaseinfo-change update \ && apt-get update --fix-missing \ && apt-get upgrade -y \ && apt-get install --yes --no-install-recommends \ - awscli \ dumb-init \ build-essential \ bzip2 \ @@ -114,6 +113,10 @@ RUN apt-get install --yes --no-install-recommends libssl-dev > /dev/null \ && grep -v "options(repos = c(CRAN" "${R_HOME}/etc/Rprofile.site" > tmp.txt && mv tmp.txt "${R_HOME}/etc/Rprofile.site" \ && echo "options(repos = c(CRAN = '${CRAN}'), download.file.method = 'libcurl')" >>"${R_HOME}/etc/Rprofile.site" +RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" && \ + unzip awscliv2.zip && \ + ./aws/install + COPY install-miniconda.bash /tmp/install-miniconda.bash RUN bash /tmp/install-miniconda.bash diff --git a/saturnbase-r-gpu/Dockerfile b/saturnbase-r-gpu/Dockerfile index 5f8b3c4..4c0585f 100644 --- a/saturnbase-r-gpu/Dockerfile +++ b/saturnbase-r-gpu/Dockerfile @@ -1,4 +1,4 @@ -FROM rocker/cuda:4.3 +FROM rocker/cuda:4.4 ENV CONDA_OVERRIDE_CUDA=11.8 EXPOSE 8888 diff --git a/saturnbase-r/Dockerfile b/saturnbase-r/Dockerfile index 4e67c51..6c3a0aa 100644 --- a/saturnbase-r/Dockerfile +++ b/saturnbase-r/Dockerfile @@ -1,4 +1,4 @@ -FROM rocker/r-ver:4.4.1 +FROM rocker/r-ver:4.5 LABEL org.opencontainers.image.licenses="GPL-2.0-or-later" \ org.opencontainers.image.source="https://github.com/saturncloud/images" \ @@ -32,7 +32,6 @@ RUN apt-get -qq --allow-releaseinfo-change update \ && apt-get update --fix-missing \ && apt-get upgrade -y \ && apt-get install --yes --no-install-recommends \ - awscli \ dumb-init \ build-essential \ bzip2 \ @@ -107,6 +106,9 @@ RUN apt-get -qq --allow-releaseinfo-change update \ && grep -v "options(repos = c(CRAN" "${R_HOME}/etc/Rprofile.site" > tmp.txt && mv tmp.txt "${R_HOME}/etc/Rprofile.site" \ && echo "options(repos = c(CRAN = '${CRAN}'), download.file.method = 'libcurl')" >>"${R_HOME}/etc/Rprofile.site" +RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" && \ + unzip awscliv2.zip && \ + ./aws/install COPY install-miniconda.bash /tmp/install-miniconda.bash RUN bash /tmp/install-miniconda.bash diff --git a/scripts/sync.sh b/scripts/sync.sh index 6469c1a..74f9a6a 100644 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -1,6 +1,8 @@ cp ./common/install-miniconda.bash ./saturnbase-python/install-miniconda.bash cp ./common/install-miniconda.bash ./saturnbase-python-gpu-12.1/install-miniconda.bash +cp ./common/install-miniconda.bash ./saturnbase-python-gpu-12.9/install-miniconda.bash cp ./common/install-miniconda.bash ./saturnbase-python-gpu-devel-12.1/install-miniconda.bash +cp ./common/install-miniconda.bash ./saturnbase-python-gpu-devel-12.9/install-miniconda.bash cp ./common/install-miniconda.bash ./saturnbase-python-gpu-devel-11.8/install-miniconda.bash cp ./common/install-miniconda.bash ./saturnbase-python-gpu-11.8/install-miniconda.bash cp ./common/install-miniconda.bash ./saturnbase-r/install-miniconda.bash @@ -9,13 +11,17 @@ cp ./common/install-miniconda.bash ./saturnbase-r-bioconductor/install-miniconda cp ./common/jupyter-environment.yml ./saturnbase-python/environment.yml cp ./common/jupyter-gpu-environment.yml ./saturnbase-python-gpu-12.1/environment.yml +cp ./common/jupyter-gpu-environment.yml ./saturnbase-python-gpu-12.9/environment.yml cp ./common/jupyter-gpu-environment.yml ./saturnbase-python-gpu-devel-12.1/environment.yml +cp ./common/jupyter-gpu-environment.yml ./saturnbase-python-gpu-devel-12.9/environment.yml cp ./common/jupyter-gpu-environment.yml ./saturnbase-python-gpu-devel-11.8/environment.yml cp ./common/jupyter-gpu-environment.yml ./saturnbase-python-gpu-11.8/environment.yml cp ./common/install-jupyter.bash ./saturnbase-python-gpu-devel-12.1/install-jupyter.bash +cp ./common/install-jupyter.bash ./saturnbase-python-gpu-devel-12.9/install-jupyter.bash cp ./common/install-jupyter.bash ./saturnbase-python/install-jupyter.bash cp ./common/install-jupyter.bash ./saturnbase-python-gpu-12.1/install-jupyter.bash +cp ./common/install-jupyter.bash ./saturnbase-python-gpu-12.9/install-jupyter.bash cp ./common/install-jupyter.bash ./saturnbase-python-gpu-11.8/install-jupyter.bash cp ./common/install-jupyter.bash ./saturnbase-python-gpu-devel-11.8/install-jupyter.bash