この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:3
ページ更新者:T
更新日時:2026-06-11 07:07:02

タイトル: インストール
SEOタイトル: Julia Gen.jl (Probabilistic Programming) インストール完全ガイド

この記事の要点
  • Gen.jl は MIT 開発の Julia 製確率的プログラミング言語 (PPL)
  • インストール: using Pkg; Pkg.add("Gen") で完了
  • 前提: Julia 1.6 以上 (最新の 1.10 LTS 推奨)
  • 依存: Distributions.jl / StatsBase.jl / MacroTools.jl など自動で入る
  • Jupyter で使うなら Pkg.add("IJulia")
  • Turing.jl / Stan.jl 等と比較すると Gen は柔軟性とカスタム推論が強み
  • モデルは @gen function マクロで宣言、Bayesian/MCMC/Particle Filter サポート
  • GitHub 最新は Pkg.add(url="https://github.com/probcomp/Gen.jl")

Gen.jl とは

Gen.jl は MIT の Probabilistic Computing Project が開発する Julia 製の確率的プログラミング言語 (PPL: Probabilistic Programming Language) です。 Bayesian inference (MCMC / Particle Filter / Variational Inference) を柔軟にカスタマイズできるのが特徴で、TensorFlow/PyTorch のような自動微分も統合しています。

事前準備: Julia 本体のインストール

# Linux / macOS: 公式インストーラ juliaup (推奨)
curl -fsSL https://install.julialang.org | sh

# シェル再起動後
juliaup add lts             # 1.10.x LTS
juliaup add release         # 最新リリース
juliaup default lts         # デフォルトを LTS に
julia --version             # julia version 1.10.x

# 古い手動方式 (tar.gz 展開)
wget https://julialang-s3.julialang.org/bin/linux/x64/1.10/julia-1.10.4-linux-x86_64.tar.gz
tar xf julia-1.10.4-linux-x86_64.tar.gz
sudo mv julia-1.10.4 /opt/
sudo ln -s /opt/julia-1.10.4/bin/julia /usr/local/bin/julia

Windows

# winget
winget install --id=Julialang.Julia

# Chocolatey
choco install julia

# juliaup
winget install --id=Julialang.Juliaup
juliaup add lts

Gen.jl のインストール

# Julia REPL を起動
$ julia

# Pkg モードに入る (] キー)
julia> ]
(@v1.10) pkg> add Gen

# 戻る (Backspace) → using でロード
julia> using Gen

# またはスクリプト
using Pkg
Pkg.add("Gen")
Pkg.add("Distributions")
Pkg.add("StatsBase")
Pkg.add("MCMCChains")

GitHub 最新版を入れる

using Pkg

# main ブランチ
Pkg.add(url="https://github.com/probcomp/Gen.jl")

# 特定ブランチ
Pkg.add(url="https://github.com/probcomp/Gen.jl", rev="dev")

# 確認
Pkg.status("Gen")

Jupyter Notebook で使う

using Pkg
Pkg.add("IJulia")

# Jupyter を起動
using IJulia
notebook()

# または JupyterLab
notebook(dir=pwd(), detached=true)

これで Jupyter のカーネル選択に Julia が追加され、Notebook で Gen.jl が使えます。

動作確認: 簡単な確率モデル

using Gen
using Distributions

# 1. 線形回帰モデル定義
@gen function linear_model(xs::Vector{Float64})
    slope     ~ normal(0, 2)   # 傾き ~ N(0, 2)
    intercept ~ normal(0, 10)  # 切片 ~ N(0, 10)
    noise     ~ gamma(1, 1)    # ノイズ標準偏差
    ys = Vector{Float64}(undef, length(xs))
    for (i, x) in enumerate(xs)
        ys[i] = ({(:y, i)} ~ normal(slope * x + intercept, noise))
    end
    return ys
end

# 2. 観測データ
xs = [1.0, 2.0, 3.0, 4.0, 5.0]
true_ys = [2.5, 4.7, 6.8, 9.1, 11.2]

# 3. 観測値を制約
constraints = choicemap()
for (i, y) in enumerate(true_ys)
    constraints[(:y, i)] = y
end

# 4. importance sampling で推論
trace, weight = generate(linear_model, (xs,), constraints)
println("slope = ", trace[:slope])
println("intercept = ", trace[:intercept])

MCMC 推論サンプル

using Gen

# Metropolis-Hastings サンプリング
function mh_inference(model, observations, num_samples)
    trace, _ = generate(model, (xs,), observations)
    slopes = Float64[]
    intercepts = Float64[]
    for i in 1:num_samples
        trace, _ = mh(trace, select(:slope, :intercept))
        push!(slopes, trace[:slope])
        push!(intercepts, trace[:intercept])
    end
    return slopes, intercepts
end

slopes, intercepts = mh_inference(linear_model, constraints, 10000)
println("slope mean: ", sum(slopes) / length(slopes))

他の PPL との比較

PPL言語強み弱み
Gen.jlJulia柔軟性 / カスタム推論 / GFIユーザ少 / 学習曲線
Turing.jlJuliaシンプル API / 自動微分カスタム推論が限定的
Stan独自 (C++)HMC/NUTS 高速 / 安定記述自由度低い
PyMCPythonPython エコシステム / NumPy 連携大規模で遅め
NumPyroPythonJAX 高速 / GPU 対応新興 / API 変動
PyroPythonPyTorch ベース / DL 連携HMC 系遅め

環境別の注意点

環境注意点
Linuxjuliaup 経由インストール推奨。libgfortran が必要なケース有
macOS (Intel / Apple Silicon)arm64 ネイティブ版を juliaup で。Rosetta 2 経由は遅い
Windowsパス長制限。プロジェクトを浅い階層に
WSL2Windows で Linux 版 Julia を使うのが快適
Dockerjulia:1.10 公式イメージ。Pkg.add("Gen") を Dockerfile で

Docker でのセットアップ

FROM julia:1.10

WORKDIR /app

# Project.toml と Manifest.toml をコピー
COPY Project.toml Manifest.toml ./

# 依存を一括インストール
RUN julia -e 'using Pkg; Pkg.instantiate(); Pkg.precompile()'

COPY . .

CMD ["julia", "--project=.", "run.jl"]

トラブルシューティング

症状対処
初回 using Gen がやたら遅い事前コンパイル中。一度成功すれば次回以降速い
Pkg.add で SSL エラープロキシ環境変数 JULIA_PKG_SERVER / HTTPS_PROXY を設定
古い Julia で Gen が入らないJulia 1.6+ にアップグレード。juliaup で簡単
ERROR: LoadError: UndefVarError: @gen not definedusing Gen 忘れ

FAQ

Q: Gen.jl と Turing.jl どちらを学ぶべき?
A: シンプルな確率モデルなら Turing.jl が書きやすい。カスタム推論アルゴリズムや programmable inference が要るなら Gen.jl。

Q: Python ユーザに薦めるなら?
A: Julia の学習コストを考えると、まずは PyMCNumPyro から入るほうが現実的。本格的に推論カスタマイズが必要になったら Gen.jl 検討。

Q: GPU で動く?
A: Julia の CUDA.jl と組合せれば可能。ただし Gen の標準 API では明示的に GPU 配列を扱う必要があり、初心者向けではありません。