function read_and_process(filename)
open(filename, "r") do f
l = join(readlines(f), "\n")
"\"" * replace(l, "\"" => "\\\"") * "\""
end
end
l = read_and_process("remote-test.jl")
println(l)
proc = My.open(`ssh localhost julia -e $l`, read=true)
println(readlines(proc.out))
2022年7月7日木曜日
Julia のコードをssh越しにプッシュする
Juliaには-eというオプションがあって、同じことができる。
方針は同じで、ダブルクォートをエスケープして、前後にダブルクォートをつける。
これは3行ぐらいのコードでしか試してないのでどのくらいいけるのかわからない。
2022年3月16日水曜日
ABCIでjulia multi node
ABCIではマルチノードを確保して、相互にsshできる。
qrsh -g XXXX -I USE_SSH=1 -v SSH_PORT=2222 -l rt_F=2とかやる。すると環境変数SGE_JOB_HOSTLISTに書かれたファイルにホストのリストが 入るので、Juliaのジョブの中で下のような関数を実行してやれば、 workerを追加することができる。
using Distributed
function invoke_hosts(port)
hosts = open(ENV["SGE_JOB_HOSTLIST"]) do f
readlines(f)
end
pairs = map(hosts) do h
"$h:$port"
end
addprocs(pairs; sshflags="-o StrictHostKeyChecking=no")
end
2020年6月30日火曜日
Julia でデータフレームにCSV (というかTSV)を読み込む
なんかいろいろ二転三転してるらしく検索してでてくる方法がつかえなかったりしてこまる。
バージョンが1.0に到達していないからと言って、もうすこしなんとかしてほしいものだ。
import DataFrames
import CSV
df = DataFrame(CSV.File("MPIJL", delim=' ', header=["target", "type", "size", "time"]))
条件で行を絞り込み
t1 = df[df.target .== target, :] v8 = t1[t1.type .== "UInt8", :]なんかもっといい方法あるんじゃないのかなあ。
2020年5月18日月曜日
abci でjulia mpi
JuliaのMPIバインドをABCIで動かせるか確認。
Juliaにはマルチノード対応があるが、それとは全く別の枠組みで、ただのメッセージパッシングライブラリが動くだけ。
.bashrcに以下を追記。
module load julia module load openmpi/3.1.6でjuliaを起動して、
import Pkg
Pkg.add("MPI")
ENV["JULIA_MPI_BINARY"]="system"
Pkg.build("MPI")
Pkt.add するとどうもMPIを独自にダウンロードしているようなので、システムのMPIを使わせるために
下の2行が必要らしい。
こんなふうにバッチファイルを書いて、
#!/bin/bash #$ -l rt_F=2 #$ -cwd source /etc/profile.d/modules.sh module load julia module load openmpi/3.1.6 mpiexec -n 2 -N 1 julia hello.jl
qsub -g XXXX test.shとかで起動。 ちなみにABCIではノード専有の rt_F以外の構成ではマルチノードジョブが動かない。なんでやねん。
2020年5月9日土曜日
juliaのwrapperの意味
https://docs.julialang.org/en/latest/manual/faq/#catch-ctrl-c-1
に出てくる下記のコードの意味がしばらくわからなかったのでメモ。
#!/bin/bash
#=
exec julia --color=yes --startup-file=no -e 'include(popfirst!(ARGS))' \
"${BASH_SOURCE[0]}" "$@"
=#
@show ARGS # put any Julia code here
このコードはbashとしてもJuliaとしても解釈できるようになっているのがみそ。
bashで起動すると、2行目はコメントとして無視され、3行目が実行される。execなので、これ以降の行はbashとしては解釈されない。2行目はこのファイル自体を引数としてJuliaを起動している。
Juliaでは'#=' '=#'がマルチラインコメントとして無視されるので、2-5行目はスキップされ、6行目以降が通常のJuliaコードとして解釈されるという仕掛け。 なるほど。
2020年5月8日金曜日
julia でモジュールの中の関数を書き換える
@eval MODULENAME function FUNC(...) ... endとやるとモジュールMODULENAME内の関数FUNCを再定義できる、ようだ。 でもグローバル変数の参照とかうまく行かないようで一筋縄では行かないのであった。
2020年5月6日水曜日
julia でリモートクラスタを使う
Juliaはリモートでプロセスを起動して使う機能が組み込みでついている 。sshトンネルでも可能。
using Distributions
addprocs([("sss-no 127.0.0.1", 3)], tunnel=true, dir="/home/nakada", max_parallel=10, exename="julia", topology=:master_worker)
はじめうまく行かなかったのは、手元のSSHのほうで余分なforwardを行っていたら、2度目以降にそれが警告を出すようになり そのせいでうまく情報を取得できなかったようだ。
2020年5月5日火曜日
新しくインストールしたJuliaでjupyter を使う
いつも忘れるので備忘のために。
もちろん事前にPythonでjupyerをインストールしておく必要がある。
> julia
julia> import Pkg;
julia> Pkg.add("IJulia")
これで抜けて普通に
> jupyter notebookでJupyterを起動すれば、カーネルとして新しいバージョンが選択できるようになっている。
登録:
投稿 (Atom)