インストール
近い将来、std::autodiff は rustup 経由でユーザーが利用できるようになるはずです。
ただし、rustc/enzyme/autodiff のコントリビューターとしては、引き続きソースから rustc をビルドする必要があります。
当面の間、次のいずれかを使用している場合は、最新の nightly ツールチェーンで std::autodiff を有効にするための最新ビルドをダウンロードできます。
Linux、x86_64-unknown-linux-gnu または aarch64-unknown-linux-gnu
Windows、x86_64-llvm-mingw または aarch64-llvm-mingw
以前は Apple(aarch64-apple)向けのビルドもダウンロードできましたが、現時点では使用できません。
他のプラットフォームが必要な場合は、autodiff を含む rustc をソースからビルドできます。 希望するターゲット向けの自動ビルドを有効にすることに協力したい場合は、issue を開いてください。
インストールガイド
Linux または Windows で std::autodiff を使用したいだけで、プロジェクトへ PR を送る予定がない場合は、既存の nightly インストールをそのまま使用し、不足しているコンポーネントをダウンロードすることをおすすめします。次を実行してください。
rustup +nightly component add enzyme
Apple サポートは、下流での破損のため一時的に元に戻されました。再び有効化できるまで、ソースからビルドしてください。
Nix ユーザー向けインストールガイド。
このセットアップは、nix と autodiff のユーザーによって推奨されたものです。
これは Overlay を使用します。
そのリポジトリを使用して問題ないかどうかは、ご自身で確認してください。
その場合、std::autodiff をサポートする rustc を取得するために、次の nix 設定を使用できます。
{
enzymeLib = pkgs.fetchzip {
url = "https://ci-artifacts.rust-lang.org/rustc-builds/ec818fda361ca216eb186f5cf45131bd9c776bb4/enzyme-nightly-x86_64-unknown-linux-gnu.tar.xz";
sha256 = "sha256-Rnrop44vzS+qmYNaRoMNNMFyAc3YsMnwdNGYMXpZ5VY=";
};
rustToolchain = pkgs.symlinkJoin {
name = "rust-with-enzyme";
paths = [pkgs.rust-bin.nightly.latest.default];
nativeBuildInputs = [pkgs.makeWrapper];
postBuild = ''
libdir=$out/lib/rustlib/x86_64-unknown-linux-gnu/lib
cp ${enzymeLib}/enzyme-preview/lib/rustlib/x86_64-unknown-linux-gnu/lib/libEnzyme-22.so $libdir/
wrapProgram $out/bin/rustc --add-flags "--sysroot $out"
'';
};
}
ビルド手順
まず、Rust リポジトリをクローンして設定する必要があります。
好みに応じて、--enable-clang または --enable-lld も有効にしたい場合があります。
git clone git@github.com:rust-lang/rust
cd rust
./configure --release-channel=nightly --enable-llvm-enzyme --enable-llvm-link-shared --enable-llvm-assertions --enable-ninja --enable-option-checking --disable-docs --set llvm.download-ci-llvm=false
その後、次を使用して rustc をビルドできます。
./x build --stage 1 library
その後、rustc toolchain link により cargo 経由で使用できるようになります。
rustup toolchain link enzyme build/host/stage1
rustup toolchain install nightly # -Z unstable-options を有効にする
次に、テストケースを実行できます。
./x test --stage 1 tests/codegen-llvm/autodiff
./x test --stage 1 tests/pretty/autodiff
./x test --stage 1 tests/ui/autodiff
./x test --stage 1 tests/run-make/autodiff
./x test --stage 1 tests/ui/feature-gates/feature-gate-autodiff.rs
Autodiff はまだ実験的なため、自分のプロジェクトで使用したい場合は、Cargo.toml に lto="fat" を追加し、
cargo または cargo +nightly の代わりに RUSTFLAGS="-Zautodiff=Enable" cargo +enzyme を使用する必要があります。
Compiler Explorer と dist ビルド
私たちの compiler explorer インスタンスも、同様の方法で新しい rustc に更新できます。 まず、docker インスタンスを準備します。
docker run -it ubuntu:22.04
export CC=clang CXX=clang++
apt update
apt install wget vim python3 git curl libssl-dev pkg-config lld ninja-build cmake clang build-essential
次に、少し変更した方法で rustc をビルドします。
git clone https://github.com/rust-lang/rust
cd rust
./configure --release-channel=nightly --enable-llvm-enzyme --enable-llvm-link-shared --enable-llvm-assertions --enable-ninja --enable-option-checking --disable-docs --set llvm.download-ci-llvm=false
./x dist
次に、tarball をホストにコピーします。
dockerid は docker ps -a の下にある最新のエントリです。
docker cp <dockerid>:/rust/build/dist/rust-nightly-x86_64-unknown-linux-gnu.tar.gz rust-nightly-x86_64-unknown-linux-gnu.tar.gz
その後、EnzymeAD/rust リポジトリに新しい(プレリリース)タグを作成し、EnzymeAD/enzyme-explorer リポジトリに対してタグを更新する PR を作成できます。
PR で tgymnich にメンションし、彼の更新スクリプトを実行してもらうことを忘れないでください。
注: EnzymeAD/rust をアーカイブし、ここの手順を更新する必要があります。
explorer はまもなく、公式の rust サーバーから rustc ツールチェーンを取得できるようになるはずです。
Enzyme 自体のビルド手順
上記の Rust ビルド手順に従うと、Rust コンパイラとともに LLVMEnzyme、LLDEnzyme、ClangEnzyme がビルドされます。 単にそれらのいずれかを使いたいだけで、cmake の経験がない場合は、この方法をおすすめします。 ただし、Rust なしで Enzyme だけをビルドしたい場合は、これらの手順が役立つかもしれません。
git clone git@github.com:llvm/llvm-project
cd llvm-project
mkdir build
cd build
cmake -G Ninja ../llvm -DLLVM_TARGETS_TO_BUILD="host" -DLLVM_ENABLE_ASSERTIONS=ON -DLLVM_ENABLE_PROJECTS="clang;lld" -DLLVM_ENABLE_RUNTIMES="openmp" -DLLVM_ENABLE_PLUGINS=ON -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=.
ninja
ninja install
これにより動作する LLVM ビルドが得られるため、続いて Enzyme のビルドを進められます。
llvm-project フォルダーを離れ、次のコマンドを実行してください。
git clone git@github.com:EnzymeAD/Enzyme
cd Enzyme/enzyme
mkdir build
cd build
cmake .. -G Ninja -DLLVM_DIR=<YourLocalPath>/llvm-project/build/lib/cmake/llvm/ -DLLVM_EXTERNAL_LIT=<YourLocalPath>/llvm-project/llvm/utils/lit/lit.py -DCMAKE_BUILD_TYPE=Release -DCMAKE_EXPORT_COMPILE_COMMANDS=YES -DBUILD_SHARED_LIBS=ON
ninja
これにより Enzyme がビルドされ、Enzyme/enzyme/build/lib/<LLD/Clang/LLVM/lib>Enzyme.so に見つけることができます。
(末尾は OS によって異なる場合があります)。