Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

インストール

近い将来、std::autodiff は rustup 経由でユーザーが利用できるようになるはずです。 ただし、rustc/enzyme/autodiff のコントリビューターとしては、引き続きソースから rustc をビルドする必要があります。 当面の間、次のいずれかを使用している場合は、最新の nightly ツールチェーンで std::autodiff を有効にするための最新ビルドをダウンロードできます。 Linuxx86_64-unknown-linux-gnu または aarch64-unknown-linux-gnu Windowsx86_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 によって異なる場合があります)。