# Singularity Image kernel in Jupyter Notebook ## :memo: Where do I start? - 聯絡窗口 Email us : 2303117@narlabs.org.tw 王小姐 ## :a: Singularity 容器部屬 1. 切換到原生 Python 3 (ipykernel) 2. 更改以下三個參數 - 安裝儲存位置 saveFolder=? - Kernel標籤名稱 label=? - Image映像檔位置 IMAGE=? ``` %%bash ### configure saveFolder=work label=LlamaFactory IMAGE=/work/u00cjz00/nvidia/cuda118/c00cjz00_cuda11.8_pytorch_2.1.2-cuda11.8-cudnn8-devel-llama_factory.sif ### 1. IMAGE basename IMAGE_basename=S-${saveFolder}-${label}_$(basename "$IMAGE" .sif) ### 2. VIRTUAL LIBRARY and BINARY FOLDER libraryFolder=/${saveFolder}/$(whoami)/libraryFolder/${IMAGE_basename}/local/lib libraryFolder_binding=${libraryFolder}:${HOME}/.local/lib binFolder=/${saveFolder}/$(whoami)/libraryFolder/${IMAGE_basename}/local/bin binFolder_binding=${binFolder}:${HOME}/.local/bin rm -rf /${saveFolder}/$(whoami)/libraryFolder/${IMAGE_basename} mkdir -p ${libraryFolder} ${binFolder} # 3. PIP INSTALL SLAVE IPYKERNEL ml libs/singularity/3.10.2 singularity exec -B ${libraryFolder_binding} -B ${binFolder_binding} ${IMAGE} pip install -q ipykernel IProgress ipywidgets # 4. IPYKERNEL for IMAGE IPYKERNEL=/work/u00cjz00/slurm_jobs/ipykernel/t2/image_with_ipykernel_local mkdir -p ${HOME}/.local/share/jupyter/kernels/ rm -rf ${HOME}/.local/share/jupyter/kernels/${IMAGE_basename} cp -rf ${IPYKERNEL} ${HOME}/.local/share/jupyter/kernels/${IMAGE_basename} chmod -R 755 ${HOME}/.local/share/jupyter/kernels/${IMAGE_basename} IMAGE_desc=$(echo $IMAGE | sed 's_/_\\/_g') sed -i "s/templateSIF/${IMAGE_desc}/g" ${HOME}/.local/share/jupyter/kernels/${IMAGE_basename}/kernel.json sed -i "s/templateImage/Image_${IMAGE_basename}/g" ${HOME}/.local/share/jupyter/kernels/${IMAGE_basename}/kernel.json sed -i "s@templateLibrayFolder@${libraryFolder_binding}@g" ${HOME}/.local/share/jupyter/kernels/${IMAGE_basename}/kernel.json sed -i "s@templateBinFolder@${binFolder_binding}@g" ${HOME}/.local/share/jupyter/kernels/${IMAGE_basename}/kernel.json # 5. check size du -sh ${libraryFolder} echo /home/$(whoami)/.local/share/jupyter/kernels/${IMAGE_basename}/kernel.json cat /home/$(whoami)/.local/share/jupyter/kernels/${IMAGE_basename}/kernel.json cmd="/work/opt/ohpc/Taiwania3/libs/singularity/3.10.2/bin/singularity exec --nv --cleanenv \ -B /work -B /work/u00cjz00/os/ubuntu/bin:/usr/ubuntu_bin \ -B ${libraryFolder}:/home/g00cjz00/.local/lib \ -B ${binFolder}:/home/g00cjz00/.local/bin \ ${IMAGE} \ bash -c 'export PATH=\$PATH:\$HOME/.local/bin; echo \$PATH;' " echo ${cmd} ``` 3. 執行以上程式碼 ![image](https://hackmd.io/_uploads/HkhfR7npp.png) 4. 重新restart kernel, kernel選單即會出現新的標籤 ![image](https://hackmd.io/_uploads/HJ3rC7na6.png) 5. 切換到新kernel 執行以下指令, 確認是否支援GPU ``` # GPU確認 !nvidia-smi import torch torch.cuda.is_available() ``` ![image](https://hackmd.io/_uploads/B1qFC7np6.png) 6. 切換到新kernel 執行以下指令, 確認torch 與cuda版本 ``` # torch and cuda version import torch print(torch.__version__) print(torch.version.cuda) ``` ![image](https://hackmd.io/_uploads/ByOTAQ366.png) ## :movie_camera: 操作影片教學 {%youtube N7BwcdMYl2k %}