mirror of
https://github.com/superlinear-ai/python-gpu.git
synced 2025-03-26 03:37:17 +03:00
feat: Docker files to build gpu images
This commit is contained in:
22
.github/dependabot.yml
vendored
Normal file
22
.github/dependabot.yml
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
version: 2
|
||||||
|
|
||||||
|
updates:
|
||||||
|
- package-ecosystem: github-actions
|
||||||
|
directory: /
|
||||||
|
schedule:
|
||||||
|
interval: monthly
|
||||||
|
commit-message:
|
||||||
|
prefix: "ci"
|
||||||
|
prefix-development: "ci"
|
||||||
|
include: "scope"
|
||||||
|
- package-ecosystem: pip
|
||||||
|
directory: /
|
||||||
|
schedule:
|
||||||
|
interval: monthly
|
||||||
|
commit-message:
|
||||||
|
prefix: "build"
|
||||||
|
prefix-development: "build"
|
||||||
|
include: "scope"
|
||||||
|
versioning-strategy: lockfile-only
|
||||||
|
allow:
|
||||||
|
- dependency-type: "all"
|
||||||
45
.github/workflows/publish.yml
vendored
Normal file
45
.github/workflows/publish.yml
vendored
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
name: Build and deploy
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- master
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build_and_push_to_dockerhub:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
version:
|
||||||
|
- python: "3.8"
|
||||||
|
tag: "cuda11.8-python3.8"
|
||||||
|
- python: "3.9"
|
||||||
|
tag: "cuda11.8-python3.9"
|
||||||
|
- python: "3.10"
|
||||||
|
tag: "cuda11.8-python3.10"
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Login to DockerHub
|
||||||
|
uses: docker/login-action@v1
|
||||||
|
with:
|
||||||
|
registry: my.registry.com
|
||||||
|
username: ${{ secrets.REGISTRY_USERNAME }}
|
||||||
|
password: ${{ secrets.REGISTRY_PASSWORD }}
|
||||||
|
|
||||||
|
- name: Setup Docker Buildx
|
||||||
|
id: buildx
|
||||||
|
uses: docker/setup-buildx-action@v1
|
||||||
|
|
||||||
|
- name: Build and push Docker image
|
||||||
|
uses: docker/build-push-action@v2
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
push: true
|
||||||
|
build-args: PYTHON_VERSION=${{ matrix.version.python }}
|
||||||
|
tags: my_registry.com/${{ matrix.version.tag }}:$
|
||||||
|
cache-from: type=registry,ref=my_registry.com/${{ matrix.version.tag }}:latest
|
||||||
64
.gitignore
vendored
Normal file
64
.gitignore
vendored
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
# Coverage.py
|
||||||
|
htmlcov/
|
||||||
|
reports/
|
||||||
|
|
||||||
|
# cruft
|
||||||
|
*.rej
|
||||||
|
|
||||||
|
# Data
|
||||||
|
*.csv*
|
||||||
|
*.dat*
|
||||||
|
*.pickle*
|
||||||
|
*.xls*
|
||||||
|
*.zip*
|
||||||
|
data/
|
||||||
|
|
||||||
|
# direnv
|
||||||
|
.envrc
|
||||||
|
|
||||||
|
# dotenv
|
||||||
|
.env
|
||||||
|
|
||||||
|
# Hypothesis
|
||||||
|
.hypothesis/
|
||||||
|
|
||||||
|
# Jupyter
|
||||||
|
*.ipynb
|
||||||
|
.ipynb_checkpoints/
|
||||||
|
notebooks/
|
||||||
|
|
||||||
|
# macOS
|
||||||
|
.DS_Store
|
||||||
|
|
||||||
|
# mypy
|
||||||
|
.dmypy.json
|
||||||
|
.mypy_cache/
|
||||||
|
|
||||||
|
# Node.js
|
||||||
|
node_modules/
|
||||||
|
|
||||||
|
# Poetry
|
||||||
|
.venv/
|
||||||
|
dist/
|
||||||
|
|
||||||
|
# PyCharm
|
||||||
|
.idea/
|
||||||
|
|
||||||
|
# pyenv
|
||||||
|
.python-version
|
||||||
|
|
||||||
|
# pytest
|
||||||
|
.pytest_cache/
|
||||||
|
|
||||||
|
# Python
|
||||||
|
__pycache__/
|
||||||
|
*.py[cdo]
|
||||||
|
|
||||||
|
# Ruff
|
||||||
|
.ruff_cache/
|
||||||
|
|
||||||
|
# Terraform
|
||||||
|
.terraform/
|
||||||
|
|
||||||
|
# VS Code
|
||||||
|
.vscode/
|
||||||
98
Dockerfile
Normal file
98
Dockerfile
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
# syntax=docker/dockerfile:1
|
||||||
|
ARG PYTHON_VERSION=3.8
|
||||||
|
FROM python:$PYTHON_VERSION-slim AS base
|
||||||
|
|
||||||
|
# Install Poetry.
|
||||||
|
ENV POETRY_VERSION 1.4.2
|
||||||
|
RUN --mount=type=cache,target=/root/.cache/pip/ \
|
||||||
|
pip install poetry~=$POETRY_VERSION
|
||||||
|
|
||||||
|
# Install compilers that may be required for certain packages or platforms.
|
||||||
|
RUN rm /etc/apt/apt.conf.d/docker-clean
|
||||||
|
RUN --mount=type=cache,target=/var/cache/apt/ \
|
||||||
|
--mount=type=cache,target=/var/lib/apt/ \
|
||||||
|
apt-get update && \
|
||||||
|
apt-get install --no-install-recommends --yes build-essential
|
||||||
|
|
||||||
|
# Create a non-root user and switch to it [1].
|
||||||
|
# [1] https://code.visualstudio.com/remote/advancedcontainers/add-nonroot-user
|
||||||
|
ARG UID=1000
|
||||||
|
ARG GID=$UID
|
||||||
|
RUN groupadd --gid $GID user && \
|
||||||
|
useradd --create-home --gid $GID --uid $UID user --no-log-init && \
|
||||||
|
chown user /opt/
|
||||||
|
USER user
|
||||||
|
|
||||||
|
# Create and activate a virtual environment.
|
||||||
|
RUN python -m venv /opt/pyhton-gpu-env
|
||||||
|
ENV PATH /opt/pyhton-gpu-env/bin:$PATH
|
||||||
|
ENV VIRTUAL_ENV /opt/pyhton-gpu-env
|
||||||
|
|
||||||
|
# Set the working directory.
|
||||||
|
WORKDIR /workspaces/pyhton-gpu/
|
||||||
|
|
||||||
|
# Install the run time Python dependencies in the virtual environment.
|
||||||
|
COPY --chown=user:user poetry.lock* pyproject.toml /workspaces/pyhton-gpu/
|
||||||
|
RUN mkdir -p /home/user/.cache/pypoetry/ && mkdir -p /home/user/.config/pypoetry/ && \
|
||||||
|
mkdir -p src/pyhton_gpu/ && touch src/pyhton_gpu/__init__.py && touch README.md
|
||||||
|
RUN --mount=type=cache,uid=$UID,gid=$GID,target=/home/user/.cache/pypoetry/ \
|
||||||
|
poetry install --only main --no-interaction
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
FROM base as ci
|
||||||
|
|
||||||
|
# Allow CI to run as root.
|
||||||
|
USER root
|
||||||
|
|
||||||
|
# Install git so we can run pre-commit.
|
||||||
|
RUN --mount=type=cache,target=/var/cache/apt/ \
|
||||||
|
--mount=type=cache,target=/var/lib/apt/ \
|
||||||
|
apt-get update && \
|
||||||
|
apt-get install --no-install-recommends --yes git
|
||||||
|
|
||||||
|
# Install the CI/CD Python dependencies in the virtual environment.
|
||||||
|
RUN --mount=type=cache,target=/root/.cache/pypoetry/ \
|
||||||
|
poetry install --only main,test --no-interaction
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
FROM base as dev
|
||||||
|
|
||||||
|
# Install development tools: curl, git, gpg, ssh, starship, sudo, vim, and zsh.
|
||||||
|
USER root
|
||||||
|
RUN --mount=type=cache,target=/var/cache/apt/ \
|
||||||
|
--mount=type=cache,target=/var/lib/apt/ \
|
||||||
|
apt-get update && \
|
||||||
|
apt-get install --no-install-recommends --yes curl git gnupg ssh sudo vim zsh && \
|
||||||
|
sh -c "$(curl -fsSL https://starship.rs/install.sh)" -- "--yes" && \
|
||||||
|
usermod --shell /usr/bin/zsh user && \
|
||||||
|
echo 'user ALL=(root) NOPASSWD:ALL' > /etc/sudoers.d/user && chmod 0440 /etc/sudoers.d/user
|
||||||
|
USER user
|
||||||
|
|
||||||
|
# Install the development Python dependencies in the virtual environment.
|
||||||
|
RUN --mount=type=cache,uid=$UID,gid=$GID,target=/home/user/.cache/pypoetry/ \
|
||||||
|
poetry install --no-interaction
|
||||||
|
|
||||||
|
# Persist output generated during docker build so that we can restore it in the dev container.
|
||||||
|
COPY --chown=user:user .pre-commit-config.yaml /workspaces/pyhton-gpu/
|
||||||
|
RUN mkdir -p /opt/build/poetry/ && cp poetry.lock /opt/build/poetry/ && \
|
||||||
|
git init && pre-commit install --install-hooks && \
|
||||||
|
mkdir -p /opt/build/git/ && cp .git/hooks/commit-msg .git/hooks/pre-commit /opt/build/git/
|
||||||
|
|
||||||
|
# Configure the non-root user's shell.
|
||||||
|
ENV ANTIDOTE_VERSION 1.8.6
|
||||||
|
RUN git clone --branch v$ANTIDOTE_VERSION --depth=1 https://github.com/mattmc3/antidote.git ~/.antidote/ && \
|
||||||
|
echo 'zsh-users/zsh-syntax-highlighting' >> ~/.zsh_plugins.txt && \
|
||||||
|
echo 'zsh-users/zsh-autosuggestions' >> ~/.zsh_plugins.txt && \
|
||||||
|
echo 'source ~/.antidote/antidote.zsh' >> ~/.zshrc && \
|
||||||
|
echo 'antidote load' >> ~/.zshrc && \
|
||||||
|
echo 'eval "$(starship init zsh)"' >> ~/.zshrc && \
|
||||||
|
echo 'HISTFILE=~/.history/.zsh_history' >> ~/.zshrc && \
|
||||||
|
echo 'HISTSIZE=1000' >> ~/.zshrc && \
|
||||||
|
echo 'SAVEHIST=1000' >> ~/.zshrc && \
|
||||||
|
echo 'setopt share_history' >> ~/.zshrc && \
|
||||||
|
echo 'bindkey "^[[A" history-beginning-search-backward' >> ~/.zshrc && \
|
||||||
|
echo 'bindkey "^[[B" history-beginning-search-forward' >> ~/.zshrc && \
|
||||||
|
mkdir ~/.history/ && \
|
||||||
|
zsh -c 'source ~/.zshrc'
|
||||||
Reference in New Issue
Block a user