Skip to content

DGU-AILab/DECS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

102 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DECS Docker Images

DECS 이미지는 GPU/driver 호환성을 관리하기 위해 CUDA variant별로 빌드한다. 공통 Dockerfile은 하나만 유지하고, 실제 CUDA/TensorFlow 조합은 image-variants.json에서 관리한다.

Image Variants

Variant tag CUDA TensorFlow Base image 최소 NVIDIA driver 상태
cuda11.8-tf2.13-ubuntu22.04-260705 11.8 2.13.0 nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04 520.61.05 stable
cuda12.2-tf2.15-ubuntu22.04-260705 12.2 2.15.0 nvidia/cuda:12.2.2-cudnn8-devel-ubuntu22.04 535.104.05 stable
cuda12.3-tf2.16-ubuntu22.04-260705 12.3 2.16.1 nvidia/cuda:12.3.2-devel-ubuntu22.04 + tensorflow[and-cuda] 545.23.08 stable
cuda12.5-tf2.20-ubuntu22.04-260705 12.5 2.20.0 nvidia/cuda:12.5.1-cudnn-devel-ubuntu22.04 555.42.06 stable
cuda12.8-tf2.20-ubuntu22.04-260705 12.8 2.20.0 nvidia/cuda:12.8.1-cudnn-devel-ubuntu22.04 570.124.06 experimental

Alias tags:

Alias Target
latest, stable, cuda12.5-tf2.20 CUDA 12.5 / TensorFlow 2.20
legacy, cuda11.8-tf2.13 CUDA 11.8 / TensorFlow 2.13
cuda12.2-tf2.15 CUDA 12.2 / TensorFlow 2.15
cuda12.3-tf2.16 CUDA 12.3 / TensorFlow 2.16
cuda12.8-tf2.20, h200-experimental CUDA 12.8 / TensorFlow 2.20

TensorFlow 공식 빌드 구성 기준으로 TensorFlow 2.16.1은 CUDA 12.3/cuDNN 8.9 조합이고, TensorFlow 2.20.0은 CUDA 12.5/cuDNN 9.3 조합이다. CUDA 12.8 이미지는 H200/LAB10 검증 전까지 experimental로 둔다.

Included Runtime

모든 variant는 다음을 포함한다.

  • CUDA/cuDNN base image
  • TensorFlow
  • system packages: SSH, sudo, auditd, Kerberos client, Korean fonts/input, Chrome, Xfce, TigerVNC, noVNC
  • Miniforge under /opt/conda
  • micromamba
  • JupyterLab / Notebook / ipywidgets
  • decs-chrome wrapper for GUI Chrome sessions with profile/cache under /var/tmp/decs-chrome-*

entrypoint.sh는 시작 시 이미지 variant, CUDA/TensorFlow 버전, 요구 driver 버전, 실제 nvidia-smi 정보를 출력한다. STRICT_CUDA_COMPAT=true를 주면 host driver가 variant의 최소 driver보다 낮을 때 시작을 실패시킨다.

Build

전체 variant dry-run:

python3 scripts/build_variants.py --dry-run

특정 variant build:

python3 scripts/build_variants.py --variant cuda12.5-tf2.20-ubuntu22.04

push까지 수행:

python3 scripts/build_variants.py --variant cuda12.5-tf2.20-ubuntu22.04 --push

GitHub Actions는 main 대상 PR이 merge되거나 workflow_dispatch로 실행될 때 image-variants.json을 읽어 matrix build/push를 수행한다.

Usage

UID Python CLI에서는 이미지 이름과 버전을 분리해서 전달한다.

cd ~/uid/script
uidctl create-container \
  --image decs \
  --version cuda12.5-tf2.20-ubuntu22.04-260705

noVNC는 기존처럼 opt-in이다.

--enable-vnc true

관련 환경변수:

환경변수 기본값 설명
USER_ID 필수 컨테이너 안에 생성/검증할 사용자 이름
UID 필수 컨테이너 사용자 UID. create-container가 DB/AD 기준으로 결정한 값을 전달한다.
GID $UID 컨테이너 사용자 primary GID. create-container가 DB/AD 기준으로 결정한 값을 전달한다.
USER_GROUP $USER_ID 컨테이너 primary group 이름
ENABLE_VNC false true이면 TigerVNC/noVNC를 시작한다.
VNC_PASSWORD 랜덤 8자리 지정하지 않으면 /home/$USER_ID/vnc_password.txt에 저장한다.
VNC_RESOLUTION 1920x1080 VNC 화면 해상도
VNC_DEPTH 24 VNC 색상 깊이
VNC_DISPLAY 1 VNC display 번호. 기본 VNC 포트는 5901
NOVNC_PORT 6080 noVNC listen 포트
STRICT_CUDA_COMPAT false 최소 NVIDIA driver 미만이면 startup 실패
KRB5CCNAME unset Kerberos ccache path. 설정하면 사용자 shell/Jupyter/noVNC 환경에도 전달한다.
DECS_KRB5CCNAME unset KRB5CCNAME fallback.
KRB5_REALM FARM.DECS.INTERNAL DECS_KRB5_PRINCIPAL 기본값을 만들 때 쓰는 realm.
DECS_KRB5_PRINCIPAL $USER_ID@$KRB5_REALM 이 컨테이너가 기대하는 Kerberos principal.
DECS_KERBEROS_HOST_KEYTAB false true이면 사용자가 kinit하는 대신 host-side keytab refresh가 ccache를 만든다고 보고 대기한다.
DECS_USER_SUDO_MODE restricted disabled, restricted, allowed 중 하나. 기본 restricted는 package install용 sudo는 허용하되 UID 전환, 권한 변경, mount, root shell, interpreter one-liner, root editor/pager, 보호 경로 overwrite를 차단한다.

이미지는 TARGET_UID/TARGET_GID를 받지 않는다. 최종 identity는 UID/GID 하나만 사용하며, DB UID/GID와 AD uidNumber/gidNumber, FARM NFS returned UID/GID가 같은지는 create-container 쪽에서 보장한다.

Kerberized NFS 모드에서는 uidctl create-container --enable-kerberos가 host ccache directory를 컨테이너에 bind mount하고 KRB5CCNAME을 설정한다. host는 root-only keytab으로 kinit -kt를 수행해 ticket을 만들고, 컨테이너에는 keytab 없이 ccache만 공유한다. ticket 상태는 컨테이너 안에서 decs-kerberos-status로 확인할 수 있다. 기본 sudo mode는 restricted이며, 사용자가 container root로 다른 UID를 가장해 host의 다른 ccache를 쓰는 경로를 막는다.

Kerberos group sharing은 사용자가 직접 자기 홈 안의 디렉토리를 여는 방식이다. 관리자가 create script에서 AD group과 membership만 준비하면, 사용자는 컨테이너 안에서 다음처럼 공유 디렉토리를 만들 수 있다.

group-dir-share ~/sharing_dir groupA

이 helper는 사용자 권한으로만 mkdir, chgrp, chmod 2770을 수행하고, setfacl이 있으면 shared group에 parent traverse ACL과 share/default ACL을 부여한다. sudo chgrp/chmod/chown은 restricted sudo에서 차단되지만, 일반 사용자 권한의 chgrp/chmod는 self-service 공유를 위해 허용된다.

GUI Chrome은 Kerberos NFS 홈 아래에 profile DB/cache를 만들지 않도록 래퍼로 실행한다.

decs-chrome

noVNC 바탕화면에는 Chrome.desktop 바로가기가 생성된다. Chrome profile/cache/runtime은 컨테이너 로컬 /var/tmp/decs-chrome-* 아래에 저장되므로, 컨테이너를 새로 만들면 브라우저 설정과 프로필은 초기화될 수 있다.

Tests

이 저장소 내부의 테스트 파일만 사용한다. 외부 ~/uid와 ansible inventory는 호출 대상이다.

로컬 이미지 smoke test:

python3 scripts/test_image_variants.py --variant cuda12.5-tf2.20-ubuntu22.04
python3 scripts/test_image_variants.py --variant cuda12.5-tf2.20-ubuntu22.04 --gpu

~/uid/legacy/script_test/create_container.sh dry-run 연동 테스트:

python3 scripts/test_uid_create_container.py --variant cuda12.5-tf2.20-ubuntu22.04

LAB10 같은 실제 GPU host에서 ansible smoke test:

tar -czf /tmp/decs-build-context-260705.tgz Dockerfile entrypoint.sh decs-chrome .dockerignore

ansible-playbook \
  -i /home/jy/ansible/inventory.ini \
  tests/ansible/decs_image_build.yml \
  -e target_hosts=lab10 \
  -e image_tag=cuda12.8-tf2.20-ubuntu22.04-260705 \
  -e base_image=nvidia/cuda:12.8.1-cudnn-devel-ubuntu22.04 \
  -e decs_image_variant=cuda12.8-tf2.20-ubuntu22.04 \
  -e cuda_version=12.8 \
  -e tensorflow_version=2.20.0 \
  -e tensorflow_package=tensorflow==2.20.0 \
  -e min_nvidia_driver=570.124.06

ansible-playbook \
  -i /home/jy/ansible/inventory.ini \
  tests/ansible/decs_image_smoke.yml \
  -e target_hosts=lab10 \
  -e image_tag=cuda12.8-tf2.20-ubuntu22.04-260705

VNC까지 확인:

ansible-playbook \
  -i /home/jy/ansible/inventory.ini \
  tests/ansible/decs_image_smoke.yml \
  -e target_hosts=lab10 \
  -e image_tag=cuda12.5-tf2.20-ubuntu22.04-260705 \
  -e enable_vnc=true

Admin Notes

관리자용 노션 문서: https://www.notion.so/DECS-280c7692a263802ca40ff68b38f58dd1?source=copy_link

About

Dongguk Elastic Containter Service 입니다.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors