事始め

再び、singularity環境でコンテナをビルドする必要が生じた。cuSZで圧縮を実現するために

去年の10月にsingularityを使ってpymgardを作った時に殴り書きしたメモ

1. まずは、ちゃんとネットワーク越しに動くようにしたいです。そのために、singularityのコンテナを作ろうと思います。頑張ってください。
いま、eclairでSingularityのSandboxを作っています。Dockerfile的なのが、singularityにもあるらしくね、Singularity.defってのが、それから今作っています。Sandboxを。
singularity build --fakeroot --sandbox pymgard.sandbox Singularity.def
WARNING: The underlying filesystem on which resides "/home/gp.sc.cc.tohoku.ac.jp/aoyagir/new_research/The_Middleware/src/python/pymgard.sandbox" won't allow to set ownership, as a consequence the sandbox could not preserve image's files/directories ownerships

>>> compressed = mgard.compress(original, 0.1, 0, mgard.ErrorBoundType.REL, config)
GPUassert: CUDA driver version is insufficient for CUDA runtime version /MGARD/include/mgard-x/Hierarchy/../RuntimeX/DeviceAdapters/DeviceAdapterCuda.h 628
cuda (ランタイム) はドライバーより古くても大丈夫。つまり、
なので、もしかしてまたエラーが起こるかもしれないです。つまり、/tmpで作ってくださいって話です。
で、ドライバーが最新のmuffin2で実行したら、普通に行けました。ナイスです。めっちゃナイスです。


--> ナイスですねー。あとは、そうですね、monakaで今後実験していくことになるので、monakaのipでハードコーディングしちゃってください!
ここに来るまでに売ったコマンド、ちょっとまとめておきますか。


sudo singularity build --fakeroot --sandbox pymgard.sif Singularity.def # SingularityのDockerfile的なの -> sandboxの. ここ、pymgard.sifじゃなくて、pymgard.sanxboxのが正しいのではないかな?まあいいや。
sudo singularity config fakeroot -add aoyagir
singularity shell --fakeroot -writable pymgard.sandbox
singularity build --fakeroot pymgard.sif pymgard.sandbox # sandbox -> sif
singularity shell --nv pymgard.sif


ポイントとしては、
1. singualrityはホームディレクトリを共有するからファイルを移動させる必要がないこと
2. fakerootを使うには、上のコマンドでfakerootが使えるように設定する必要があること
3. sandoboxじゃないと新しいモジュールはダウンロードできないこと
4. sifじゃないとなんか知らんけど、cudaがうまく使えないってこと。だから、sandboxからsifに変換する必要があるってこと。
--> sharkでも同じことをしました。sharkのGPUを使って評価したいと思いますー--。

singularityにおけるDockerfile的なの

Bootstrap: docker
From: nvidia/cuda:12.1.1-devel-ubuntu22.04

%post
    apt-get update && \
    apt-get install -y curl cmake git g++ pkg-config protobuf-compiler libprotobuf-dev libzstd-dev python3 python3-dev python3-pip

    curl -sL https://developer.download.nvidia.com/compute/nvcomp/2.6.1/local_installers/nvcomp_2.6.1_x86_64_12.x.tgz | tar xzvf - --directory=/usr/local



    pip3 install numpy
    pip3 install tiledb
    pip3 install h5py

    git clone https://github.com/szcompressor/cuSZ.git cusz-latest
    cd cusz-latest && mkdir build && cd build

    cmake .. \
        -DPSZ_BACKEND=cuda \
        -DPSZ_BUILD_EXAMPLES=on \
        -DCMAKE_CUDA_ARCHITECTURES="75;80;86" \
        -DCMAKE_BUILD_TYPE=Release \
        -DCMAKE_COLOR_DIAGNOSTICS=on \
        -DCMAKE_INSTALL_PREFIX=[/path/to/install/dir]
    make -j
    make install

%environment
    export PYTHONPATH=/MGARD/build/lib

拡張子は、.defです。この名前じゃないとだめなのかはわかりませんが。

singularity上でcuSZを使えるようにするために1/15日に打ったコマンド全部

eclair上で

確か、eclair上じゃないとsandbox環境が作れなかった気がする。

singularity build --fakeroot --sandbox /tmp/cusz.sandbox Singularity.def

Singularity.defの中身は、

Bootstrap: docker
From: nvidia/cuda:12.1.1-devel-ubuntu22.04

%post
    apt-get update && \
    apt-get install -y curl cmake git g++ pkg-config protobuf-compiler libprotobuf-dev libzstd-dev python3 python3-dev python3-pip

    curl -sL https://developer.download.nvidia.com/compute/nvcomp/2.6.1/local_installers/nvcomp_2.6.1_x86_64_12.x.tgz | tar xzvf - --directory=/usr/local



    pip3 install numpy
    pip3 install tiledb
    pip3 install h5py

    git clone https://github.com/szcompressor/cuSZ.git cusz-latest
    cd cusz-latest && mkdir build && cd build

    cmake .. \
        -DPSZ_BACKEND=cuda \
        -DPSZ_BUILD_EXAMPLES=on \
        -DCMAKE_CUDA_ARCHITECTURES="75;80;86" \
        -DCMAKE_BUILD_TYPE=Release \
        -DCMAKE_COLOR_DIAGNOSTICS=on \
        -DCMAKE_INSTALL_PREFIX=[/path/to/install/dir]
    make -j
    make install

%environment
    export PYTHONPATH=/MGARD/build/lib

これは、cudaも入っている環境なので、cuSZのビルドも成功します。 で、一発で成功。

cusz.sandboxを見てみると、ファイルじゃなくてディレクトリになっています。これが、sandboxの特徴です。

続いて、cuszが入った上の環境をgpuから使えるように.sifに変換します。

aoyagir@eclair:~/new_research/The_Middleware/container$ singularity build --fakeroot cusa.sif cusz.sandbox
INFO:    Starting build...
INFO:    Creating SIF file...

-DCMAKE_INSTALL_PREFIXがおかしかったのでやり直し

ここを空欄にしてやり直します。 あと疑問なんだけど、sandbox -> sifに変更した時、ホームディレクトリより上にあるライブラリとかはそのまま引き継がれるってことでいいのかね。 そうです。

-DCMAKE_INSTALL_PREFIXが空欄だと、デフォルト?の/usr/local/lib/*いかにインストールされるみたいですね。 ーー>これがそのままシステムの環境として引き継がれます。

-- Install configuration: "Release"
-- Installing: /usr/local/lib/libpszkernel_seq.so
-- Installing: /usr/local/lib/libpszkernel_cu.so
-- Installing: /usr/local/lib/libpszstat_seq.so
-- Installing: /usr/local/lib/libpszstat_cu.so
-- Installing: /usr/local/lib/libpszmem.so
-- Set runtime path of "/usr/local/lib/libpszmem.so" to ""
-- Installing: /usr/local/lib/libpszutils_seq.so
-- Installing: /usr/local/lib/libpsztime.so
-- Set runtime path of "/usr/local/lib/libpsztime.so" to ""
-- Installing: /usr/local/lib/libpszspv_cu.so
-- Installing: /usr/local/lib/libpszhfbook_seq.so
-- Installing: /usr/local/lib/libpszhf_cu.so
-- Set runtime path of "/usr/local/lib/libpszhf_cu.so" to ""
-- Installing: /usr/local/lib/libpszcomp_cu.so
-- Set runtime path of "/usr/local/lib/libpszcomp_cu.so" to ""
-- Installing: /usr/local/lib/libpsztestframe_cu.so
-- Set runtime path of "/usr/local/lib/libpsztestframe_cu.so" to ""
-- Installing: /usr/local/lib/libcusz.so
-- Set runtime path of "/usr/local/lib/libcusz.so" to ""
-- Installing: /usr/local/bin/cusz
-- Set runtime path of "/usr/local/bin/cusz" to ""
-- Installing: /usr/local/lib/cmake/CUSZ/CUSZTargets.cmake
-- Installing: /usr/local/lib/cmake/CUSZ/CUSZTargets-release.cmake
-- Installing: /usr/local/lib/cmake/CUSZ/CUSZConfig.cmake
-- Installing: /usr/local/lib/cmake/CUSZ/CUSZConfigVersion.cmake
-- Installing: /usr/local/include/cusz
-- Installing: /usr/local/include/cusz/experimental
-- Installing: /usr/local/include/cusz/experimental/control.hh
-- Installing: /usr/local/include/cusz/experimental/sync.hh
-- Installing: /usr/local/include/cusz/experimental/core_type.hh
-- Installing: /usr/local/include/cusz/experimental/core_mem.hh
-- Installing: /usr/local/include/cusz/experimental/snippet.hh
-- Installing: /usr/local/include/cusz/experimental/p9y.hh
-- Installing: /usr/local/include/cusz/port
-- Installing: /usr/local/include/cusz/port/hip_suppress_warning.hh
-- Installing: /usr/local/include/cusz/port/proper_backend.hh
-- Installing: /usr/local/include/cusz/port/hip_indication.hh
-- Installing: /usr/local/include/cusz/port/hip_primitives.hh
-- Installing: /usr/local/include/cusz/port/dp_busy.hh
-- Installing: /usr/local/include/cusz/port/dpcpp_indication.hh
-- Installing: /usr/local/include/cusz/port/cuda_indication.hh
-- Installing: /usr/local/include/cusz/busyheader.hh
-- Installing: /usr/local/include/cusz/typing.hh
-- Installing: /usr/local/include/cusz/stat
-- Installing: /usr/local/include/cusz/stat/compare
-- Installing: /usr/local/include/cusz/stat/compare/compare.dp.hh
-- Installing: /usr/local/include/cusz/stat/compare/compare.thrust.hh
-- Installing: /usr/local/include/cusz/stat/compare/compare.dpl.hh
-- Installing: /usr/local/include/cusz/stat/compare/compare.cu_hip.hh
-- Installing: /usr/local/include/cusz/stat/compare/compare.stl.hh
-- Installing: /usr/local/include/cusz/stat/compare.hh
-- Installing: /usr/local/include/cusz/stat.hh
-- Installing: /usr/local/include/cusz/utils
-- Installing: /usr/local/include/cusz/utils/print_arr.hh
-- Installing: /usr/local/include/cusz/utils/vis_stat.hh
-- Installing: /usr/local/include/cusz/utils/err
-- Installing: /usr/local/include/cusz/utils/err/err.cu_hip.hh
-- Installing: /usr/local/include/cusz/utils/err/err.dp.hh
-- Installing: /usr/local/include/cusz/utils/err.hh
-- Installing: /usr/local/include/cusz/utils/debug.hh
-- Installing: /usr/local/include/cusz/utils/viewer.hh
-- Installing: /usr/local/include/cusz/utils/io.hh
-- Installing: /usr/local/include/cusz/utils/query.hh
-- Installing: /usr/local/include/cusz/utils/viewer
-- Installing: /usr/local/include/cusz/utils/viewer/viewer.noarch.hh
-- Installing: /usr/local/include/cusz/utils/viewer/viewer.dp.hh
-- Installing: /usr/local/include/cusz/utils/viewer/viewer.cu_hip.hh
-- Installing: /usr/local/include/cusz/utils/query
-- Installing: /usr/local/include/cusz/utils/query/query_dev.l0.hh
-- Installing: /usr/local/include/cusz/utils/query/query_dev.cu_hip.hh
-- Installing: /usr/local/include/cusz/utils/query/query_cpu.hh
-- Installing: /usr/local/include/cusz/utils/timer
-- Installing: /usr/local/include/cusz/utils/timer/timer.hip.hh
-- Installing: /usr/local/include/cusz/utils/timer/timer.dp.hh
-- Installing: /usr/local/include/cusz/utils/timer/timer.noarch.hh
-- Installing: /usr/local/include/cusz/utils/timer/timer.cu.hh
-- Installing: /usr/local/include/cusz/utils/timer.hh
-- Installing: /usr/local/include/cusz/utils/document.hh
-- Installing: /usr/local/include/cusz/utils/analyzer.hh
-- Installing: /usr/local/include/cusz/utils/format.hh
-- Installing: /usr/local/include/cusz/utils/config.hh
-- Installing: /usr/local/include/cusz/utils/verify.hh
-- Installing: /usr/local/include/cusz/mem.hh
-- Installing: /usr/local/include/cusz/kernel.hh
-- Installing: /usr/local/include/cusz/cusz.h
-- Installing: /usr/local/include/cusz/log
-- Installing: /usr/local/include/cusz/log/sanitize.hh
-- Installing: /usr/local/include/cusz/log/dbg
-- Installing: /usr/local/include/cusz/log/dbg/dbg.noarch.hh
-- Installing: /usr/local/include/cusz/log/dbg/dbg.cu.hh
-- Installing: /usr/local/include/cusz/log/dbg_cu.hh
-- Installing: /usr/local/include/cusz/log/dbg.hh
-- Installing: /usr/local/include/cusz/log/dbg_noarch.hh
-- Installing: /usr/local/include/cusz/port.hh
-- Installing: /usr/local/include/cusz/kernel
-- Installing: /usr/local/include/cusz/kernel/lrz
-- Installing: /usr/local/include/cusz/kernel/lrz/l23.hh
-- Installing: /usr/local/include/cusz/kernel/lrz/lproto.hh
-- Installing: /usr/local/include/cusz/kernel/lrz/l23.seq.hh
-- Installing: /usr/local/include/cusz/kernel/lrz/l21var.hh
-- Installing: /usr/local/include/cusz/kernel/lrz/l23r.hh
-- Installing: /usr/local/include/cusz/kernel/spv.hh
-- Installing: /usr/local/include/cusz/kernel/lrz.hh
-- Installing: /usr/local/include/cusz/kernel/spline.hh
-- Installing: /usr/local/include/cusz/kernel/histsp.hh
-- Installing: /usr/local/include/cusz/kernel/hist.hh
-- Installing: /usr/local/include/cusz/context.h
-- Installing: /usr/local/include/cusz/compressor.hh
-- Installing: /usr/local/include/cusz/pipeline
-- Installing: /usr/local/include/cusz/pipeline/testframe.hh
-- Installing: /usr/local/include/cusz/dryrun.hh
-- Installing: /usr/local/include/cusz/tehm.hh
-- Installing: /usr/local/include/cusz/utils.hh
-- Installing: /usr/local/include/cusz/rt_config.h
-- Installing: /usr/local/include/cusz/cusz
-- Installing: /usr/local/include/cusz/cusz/record.h
-- Installing: /usr/local/include/cusz/cusz/it.hh
-- Installing: /usr/local/include/cusz/cusz/nd.h
-- Installing: /usr/local/include/cusz/cusz/suint.hh
-- Installing: /usr/local/include/cusz/cusz/type.h
-- Installing: /usr/local/include/cusz/log.hh
-- Installing: /usr/local/include/cusz/hf
-- Installing: /usr/local/include/cusz/hf/hfstruct.h
-- Installing: /usr/local/include/cusz/hf/hfbk.cu.hh
-- Installing: /usr/local/include/cusz/hf/hfcanon.hh
-- Installing: /usr/local/include/cusz/hf/hfword.hh
-- Installing: /usr/local/include/cusz/hf/hfbk_impl.hh
-- Installing: /usr/local/include/cusz/hf/hfbk.hh
-- Installing: /usr/local/include/cusz/hf/hf.hh
-- Installing: /usr/local/include/cusz/hf/hfcodec.hh
-- Installing: /usr/local/include/cusz/mem
-- Installing: /usr/local/include/cusz/mem/layout.h
-- Installing: /usr/local/include/cusz/mem/memseg.h
-- Installing: /usr/local/include/cusz/mem/layout_cxx.hh
-- Installing: /usr/local/include/cusz/mem/memseg_cxx
-- Installing: /usr/local/include/cusz/mem/memseg_cxx/memseg_cxx.cu.hh
-- Installing: /usr/local/include/cusz/mem/memseg_cxx/memseg_cxx.hip.hh
-- Installing: /usr/local/include/cusz/mem/memseg_cxx/definition.hh
-- Installing: /usr/local/include/cusz/mem/memseg_cxx/memseg_cxx.dp.hh
-- Installing: /usr/local/include/cusz/mem/memseg_cxx.hh
-- Installing: /usr/local/include/cusz/mem/compact.hh
-- Installing: /usr/local/include/cusz/mem/compact
-- Installing: /usr/local/include/cusz/mem/compact/compact.dp.hh
-- Installing: /usr/local/include/cusz/mem/compact/compact.hip.hh
-- Installing: /usr/local/include/cusz/mem/compact/compact.seq.hh
-- Installing: /usr/local/include/cusz/mem/compact/compact.cu.hh
-- Installing: /usr/local/include/cusz/header.h
-- Installing: /usr/local/include/cusz/busyheader.h
-- Installing: /usr/local/include/cusz/cusz_version.h

はい、再び sandbox -> sifに変換。ここ、sandboxを挟む理由があるのか、ちょっとわからないんですけど、どうなんだろう。いらないんかね。

singularity build --fakeroot ../The_Middleware/container/cusz2.sif cusz2.sandbox

sifに変更した後、/usr/local/include/cuszに保存されたヘッダーの位置関係がだめだったので、sandboxに直して、ホームディレクトリ以上を変更可能にしてからまたsifに変換

ちなみに、sif内で変更しようとするとこんな感じで怒られます。

cp: cannot create regular file '../busyheader.h': Read-only file system
cp: cannot create regular file '../busyheader.hh': Read-only file system
cp: cannot create regular file '../compressor.hh': Read-only file system
cp: cannot create regular file '../context.h': Read-only file system
cp: cannot create regular file '../cusz/it.hh': Read-only file system
cp: cannot create regular file '../cusz/nd.h': Read-only file system
cp: cannot create regular file '../cusz/record.h': Read-only file system
cp: cannot create regular file '../cusz/suint.hh': Read-only file system
....

.sifはリードオンリーですからね。

singularity shell --fakeroot -writable cusz2.sandbox

ではいって、/usr/local/include/cuszの中身を全部一個上に出して、でて、また.sifに変換します。変換中。。。。。

なんか、うまくいかないから、特定のタグをcloneしてやることにしました。

もう使うことはないだろうが、singularityのまとめ

  1. コンテナ環境のホームディレクトリは共有される。ホームディレクトリ以上は、その環境のものがマウントされる。 /usr/local/libは、確かに、.sif環境と、ベアメタルとでは違うものでした。
  2. singualrityはホームディレクトリを共有するからファイルを移動させる必要がないこと。これは飢えと同じだね。
  3. fakerootを使うには、上のコマンドでfakerootが使えるように設定する必要があること。上のコマンドというのは、これですね。sudo singularity config fakeroot -add aoyagir
  4. sandoboxじゃないと新しいモジュールはダウンロードできないこと。これは、.sifはホームディレクトリより上が固定であるためです。
  5. sifじゃないとなんか知らんけど、cudaがうまく使えないってこと。だから、sandboxからsifに変換する必要があるってこと。