普段,某大のWisteriaを使っています.
Wisteriaには一応Juliaが入っていますが,最新ではありません1.
では自分のディレクトリに最新版を入れて使ってしまえ,ということになりますが,思った以上に苦労したので書き残しておきます(こんなニッチな記事,誰が見るんでしょう).
インストールには,最近話題のJuliaup
を使ってみます.
なお,この記事の内容について筆者は責任を負いませんので,実行する場合は自己責任でお願いします.
また,Wisteriaに限った話なので,他のCluster Machine上で動かない可能性大です.
手順
ホームディレクトリの変更
Wisteriaのユーザガイドを読むと,計算ノードからはホームディレクトリ(/home/ユーザー名
)にアクセスできないことがわかります.Juliaupはファイル群をホームディレクトリに入れようとするので,このままではジョブでJuliaを動かせないと思われます.そこで,ホームディレクトリを計算ノードが認識できるディレクトリに変更するという手順が必要になります.これは,ログインノードで
$ chhome /work/グループ名/ユーザー名
を実行すればOKです.パスワードを聞かれるので,Wisteriaのポータルサイトにログインする時のパスワードを入れます.
変更を反映させるために,一度ログアウトし,再度ログインします.
$ echo $HOME
を実行して,結果が/work/グループ名/ユーザー名
となることを確認しておきましょう.
Juliaのインストール
以下,/work/グループ名/ユーザー名
で作業しているものとします.
$ curl -fsSL https://install.julialang.org | sh
でJuliaupのインストールが始まります.
インストール先は〇〇でいいか?などと聞かれるので,もし/work/グループ名/ユーザー名
以下でない場所にインストールしようとしていたら,/work/グループ名/ユーザー名
以下にインストールするよう指定します.
インストールが終わると,
. /work/グループ名/ユーザー名/.bashrc
. /work/グループ名/ユーザー名/.bash_profile
. /work/グループ名/ユーザー名/.zshrc
のいずれかを実行してパスを通すよう言われるので,指示に従います.私は一番上を実行しました.
Juliaの起動,パッケージの導入
いよいよJuliaを起動します.
$ julia
とすれば,お馴染みのロゴが表示され,REPLがスタートします.
_
_ _ _(_)_ | Documentation: https://docs.julialang.org
(_) | (_) (_) |
_ _ _| |_ __ _ | Type "?" for help, "]?" for Pkg help.
| | | | | | |/ _` | |
| | |_| | | | (_| | | Version 1.9.3 (2023-08-24)
_/ |\__'_|_|_|\__'_| | Official https://julialang.org/ release
|__/ |
julia>
あとは
]
でパッケージモードに入り,add hoge
等で必要なパッケージをインストールしてください.
おまけ
私の目標は,Wisteria上でCUDA.jl
を使ってみることでした.その結果もここに書いておきます.
まず,パッケージモードでadd CUDA
を実行しインストールを行います.数分で終わります.
さて,CUDA.jl
を使ってみますが,ログインノードでJuliaを実行してusing CUDA
とかしないように注意しましょう!(ログインノードではGPUが使えないので当然エラーが出ます.私は最初このことに気づかず苦労しました…)
ここでは,GPUを積んでいるAquarius上でのインタラクティブジョブを実行し,CUDA.jl
がGPUを認識できるか試してみます.
$ pjsub --interact -g グループ名 -L rscgrp=interactive-a,node=1
でインタラクティブジョブを開始し
$ module load aquarius
$ module load cuda/12.1
$ module load cudnn/8.8.1
で必要なCUDAツールキットなどを呼び出します.
バージョンはなんでもいいと思いますが,ここではWisteriaで利用可能な最新のものとしました2.
続いて
$ julia
でJuliaをスタートし
julia> using CUDA
julia> CUDA.versioninfo()
としました.結果はここには出しませんが,
- CUDAやNVIDIAのdriverの情報
- 認識されたデバイスの情報
が表示されましたので,正しく動作しているものと考えています.
最後に
にある例を試してみます.
a = CuArray{Int}(undef, 1024)
b = copy(a)
fill!(b, 0)
b == CUDA.zeros(Int, 1024)
結果はtrue
でした.問題なく動いているようです.
終わりに
次はFlux.jl
で機械学習をしてみたいと思っています.
いつになるかわかりませんが…