🦊

win11+WSL+Docker Desktop(GPU container)+miniconda+intel MKLで環境構築

2023/12/24に公開

pythonは元々速い処理を得意としていないけどGPUコンテナとintelのnumpyやらscikit-learnを使うことで処理速度を改善させることを目的とする。
シンプルに言えばwin11 + wsl + docker + GPUコンテナ + intelついでにminicondaということです.

GPUドライバのインストール

  • 自分はGeForce Experienceが元々入っていたのでそこからインストールしました.
  • 個別DLはこちらDownload Drivers
  • ターミナルを開き以下コマンドで確認する
nvidia-smi

CUDAバージョンを控えておく

wsl2のインストール

  • wsl.exeのアップデート(kernelの更新)
wsl.exe --update
  • インストールできるディストリビューションを確認してみる
$ wsl --list --online

インストールできる有効なディストリビューションの一覧を次に示します。
'wsl --install -d <Distro>' を使用してインストールします。

NAME                                   FRIENDLY NAME
Ubuntu                                 Ubuntu
Debian                                 Debian GNU/Linux
kali-linux                             Kali Linux Rolling
Ubuntu-18.04                           Ubuntu 18.04 LTS
Ubuntu-20.04                           Ubuntu 20.04 LTS
Ubuntu-22.04                           Ubuntu 22.04 LTS
OracleLinux_7_9                        Oracle Linux 7.9
OracleLinux_8_7                        Oracle Linux 8.7
OracleLinux_9_1                        Oracle Linux 9.1
openSUSE-Leap-15.5                     openSUSE Leap 15.5
SUSE-Linux-Enterprise-Server-15-SP4    SUSE Linux Enterprise Server 15 SP4
SUSE-Linux-Enterprise-15-SP5           SUSE Linux Enterprise 15 SP5
openSUSE-Tumbleweed                    openSUSE Tumbleweed
  • 今回はubuntu 22.04 LTSで導入
wsl --install -d Ubuntu-22.04

終わったらアップデートしとくといいでしょう

sudo apt-get update && sudo apt-get upgrade -y

Docker Desktop for Windows

ここを参考にしました。
ダウンロード先はDocker Desktop for Windows

NVIDIA Container Toolkitの導入

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \
sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list \
&& sudo apt install -y nvidia-container-toolkit
  • dockerを再起動する
    右下のタスクからdocker開いて画面左下3点マークから再起動できます

動作確認(CUDAはさきほどメモっていたバージョン付近にした。ubuntuのバージョンも合わせること)

ダウンロード容量が一番小さいbaseにした
本番環境ではdevelで

$ docker run --rm --gpus all nvidia/cuda:12.3.1-base-ubuntu22.04 nvidia-smi
Unable to find image 'nvidia/cuda:12.3.1-runtime-ubuntu22.04' locally
12.3.1-runtime-ubuntu22.04: Pulling from nvidia/cuda
5e8117c0bd28: Already exists
d67fcc6ef577: Already exists
47ee674c5713: Already exists
63daa0e64b30: Already exists
d9d9aecefab5: Already exists
7a307458bce7: Pull complete
cc0ccb56a40b: Pull complete
dab1348e29e8: Pull complete
447a86b710f5: Pull complete
Digest: sha256:acb1709dcd8bd8500ab63c9a7aa3d7e5132bebd5ac519445b81969131b08a8a3
Status: Downloaded newer image for nvidia/cuda:12.3.1-runtime-ubuntu22.04

==========
== CUDA ==
==========

CUDA Version 12.3.1

Container image Copyright (c) 2016-2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved.

This container image and its contents are governed by the NVIDIA Deep Learning Container License.
By pulling and using the container, you accept the terms and conditions of this license:
https://developer.nvidia.com/ngc/nvidia-deep-learning-container-license

A copy of this license is made available in this container at /NGC-DL-CONTAINER-LICENSE for your convenience.

Sat Dec 23 03:38:37 2023
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 545.36                 Driver Version: 546.33       CUDA Version: 12.3     |
|-----------------------------------------+----------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
|                                         |                      |               MIG M. |
|=========================================+======================+======================|
|   0  NVIDIA GeForce RTX 3050 ...    On  | 00000000:01:00.0 Off |                  N/A |
| N/A   45C    P0              11W /  80W |      0MiB /  6144MiB |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+

+---------------------------------------------------------------------------------------+
| Processes:                                                                            |
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
|        ID   ID                                                             Usage      |
|=======================================================================================|
|  No running processes found                                                           |
+---------------------------------------------------------------------------------------+

ちなみにイメージはこちらにあります
Docker Hub
Tagsに欲しいイメージがあるのでTagをコピー

Dockerfileを使いCUDAとminicondaをマルチステージビルドでビルドする例

適当なところにフォルダとDockerfileを作成する
※例えば下のようにフォルダとDockerfileを作成する

cd
mkdir myapp
cd myapp
touch Dockerfile

Dockerfileエディタ例(CUDAのバージョンなどは適当に変える)

# Stage 1: CUDA base image
FROM nvidia/cuda:12.3.1-devel-ubuntu22.04 AS cuda-base
WORKDIR /app

# Stage 2: Conda environment
FROM continuumio/miniconda3 AS my_build
WORKDIR /app

# Copy necessary files from previous stage
COPY --from=cuda-base /app /app

# conda create
RUN conda create -n intelML python=3.11

# install conda package
SHELL ["conda", "run", "-n", "intelML", "/bin/bash", "-c"]
RUN apt-get update && apt-get install -y make && apt-get upgrade -y
RUN conda install -c conda-forge pyarrow
RUN conda install -c conda-forge bokeh
RUN conda install -c conda-forge matplotlib
RUN conda install -c conda-forge pandas
RUN conda install -c conda-forge plotly
RUN conda install -c conda-forge polars
RUN conda install -c conda-forge pytz
RUN conda install -c conda-forge requests
# install intel mkl
RUN conda install intel::mkl
# install pybotters
RUN pip install pybotters

# install ta-lib
RUN wget --quiet http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz -O ta-lib-0.4.0-src.tar.gz && \
    tar xvf ta-lib-0.4.0-src.tar.gz && \
    cd ta-lib/ && \
    ./configure --prefix=/usr && \
    make && \
    sudo make install && \
    cd .. && \
    pip install TA-Lib && \
    rm -R ta-lib ta-lib-0.4.0-src.tar.gz

コンテナイメージの作成例(名前はintel タグは1.0にした)

docker build -t intel:1.0 .

起動(intel_serverという名前にしました)

docker run --name intel_server -it --gpus all intel:1.0

動作確認

conda activate intelML    #Dockerfile内で作成済み
python
import numpy
exit()
exit

これで一通りの設定は完了です。
vscodeで動かすにはここをクリック

intelpythonを使うにはpythonのバージョンを確認する必要がある
リンク参照
Intel® numpy

Discussion