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