Skip to main content

Crate fandhe_ai

Crate fandhe_ai 

Source
Expand description

composition root(TASK-9.3・イシュー #410・spec 確定は fandhe-ai-spec#52/spec PR #53。docs/spec/05-tasks.md:315)。

facade は 2 つの責務を担う(spec 確定内容)。

  1. composition root(本クレート・本イシューで実装): Device 識別子を受け取り、対応する具体 BackendOps 実装 (fandhe_ai_backend_cpu::CpuBackendOps/fandhe_ai_backend_cuda::CudaBackendOps/ fandhe_ai_backend_metal::MetalBackendOps)を構築して fandhe_ai_autodiff::Tape へ 結線する。この結線ロジックを持つのは本クレートのみであり、 tensor-core/autodiff/backend-* は互いに他バックエンドを 直接参照しない構造的境界(REQ-9・docs/fusion-graph-design.md §3.4「autodiff は具体クレートへの依存を一切持たない」)を、 上位でここに一本化する。

  2. compat 公開面(compat::array/compat::Sequential): TASK-9.4(イシュー #411)で fandhe_ai_autodiff::compat から本クレートへ 移設し実装済み。サポート境界の明文化(facade が唯一のサポート 対象公開 API 面であり tensor-core/autodiff/backend-* は 内部クレート)は docs/compat-api-scope.md を参照。

  3. optim 公開面(optim。イシュー #961・親 #960。Adam〈coupled L2 weight decay〉は #1742・RMSprop/Adagrad は #1743・親 #1610・ LAMB は #1744): SGD・AdamW・Adam・RMSprop・Adagrad・LAMB・ gradient clipping・LR スケジューラを fandhe_ai::optim の単一入口へ再エクスポートする。 値型・純関数のみのため REQ-12 と矛盾しない(詳細は optim モジュール doc)。

  4. data 公開面(data。イシュー #1615・親 #1602): map-style データセット(Dataset/TensorDataset)とミニバッチ供給 (DataLoader/DataLoaderConfig)を fandhe_ai::data の単一 入口へ再エクスポートする。ホスト側だけで完結し Op/ BackendOps/VJP を経由しないため REQ-12 と矛盾しない(詳細は data モジュール doc)。

  5. nn 公開面(nn::rnn。イシュー #1955): RNN/LSTM/GRU の Sequence レベル API(Rnn/Lstm/Gru。実体は fandhe_ai_autodiff::nn。#1647)を fandhe_ai::nn::rnn の単一 入口へ純再エクスポートする。forward_seq が生 Tape を引数に 取るため facade 利用者からは直接呼べず、impl Tape に追加した rnn_forward_seq/lstm_forward_seq/gru_forward_seq(&self.0 を渡すだけの薄い委譲。step_device_param_store 等と同型)が 入口となる。イシュー #2535 で多層・双方向・層間 dropout 版 (RnnConfig・StackedRnn/StackedLstm/StackedGru・戻り値型 2 型) も同モジュールへ再エクスポートし、stacked_rnn_forward_seq/ stacked_lstm_forward_seq/stacked_gru_forward_seq を追加した。 値型の再エクスポート+薄い委譲のみで任意 BackendOps 注入経路を新設しないため REQ-12 と矛盾しない (詳細は nn::rnn モジュール doc)。同じく nn 配下に、PyTorch torch.nn.init.* 相当の初期化関数 9 個と補助 4 名を nn::init へ 純再エクスポートする(イシュー #2504。グローバル RNG に従う)。 さらに KV キャッシュ付き attention(KvCache・StatefulAttention・ MultiheadAttentionConfig)を nn::kv_cache へ純再エクスポートし、 入口として Tape::stateful_attention_forward(薄い委譲)を追加した (イシュー #2579。docs/kv-cache-design.md §11.4)。#3096 で外部キャッシュ版 Tape::stateful_attention_forward_with_cache も追加した (docs/facade-speculative-decoding-batching-design.md §19)。 #3112 でデバイス常駐ページ化キャッシュ(K-3。PagedKvCache・PagedKvCacheConfig)と 入口 Tape::new_paged_kv_cache/Tape::paged_attention_forward も追加した (docs/device-resident-kv-paged-attention-design.md §6・§13)。 損失構造体 14 種と引数型 10 種(Reduction・各オプション型 9 種。うち 5 種は #2854)は nn::loss へ純再エクスポートする(イシュー #2602・#2854。docs/facade-nn-loss-structs-exposure-decision.md)。

  6. model 公開面(model。イシュー #2087・親 #2082): ホームディレクトリ配下のキャッシュディレクトリを基盤とする ローカル限定モデルレジストリ model::ModelRegistry を提供 する。ホスト側のパス管理と interop::safetensors への委譲 のみで完結し BackendOps 注入経路を新設しないため REQ-12 と 矛盾しない(詳細は model モジュール doc・docs/facade- model-registry-decision.md 参照)。

  7. text 公開面(text。イシュー #2937・親 #2935): 語彙 lookup 型のテキスト変換 text::TextVectorization (Keras TextVectorization 相当。文字列バッチを [B, L] の Tensor<i32> へ変換する)。ホスト側の処理のみで完結し BackendOps 注入経路を新設しないため REQ-12 と矛盾しない (標準化・分割は ASCII 限定。詳細は text モジュール doc・ docs/facade-text-vectorization-design.md §16 参照)。

  8. distributed 公開面(distributed。イシュー #3147・親 #3143): DDP 初期形(std のみの TCP によるホスト側 ring all-reduce)の設定 distributed::DistributedConfig・集合の確立・分散ステップ (step_sgd/step_adam/step_adamw)。内部型は公開せず、認証・暗号化は無い (詳細は distributed モジュール doc・ docs/facade-distributed-host-collective-decision.md §16 参照)。

§公開面の設計(REQ-12: 任意 BackendOps 注入の公開 API を設けない)

利用者向けに公開するのは Device 識別子を受け取る 2 関数 (tape・tape_for)と、それに必要な最小限の型再エクスポート (Device・BackendError)のみである。fandhe_ai_autodiff::Tape・ fandhe_ai_tensor_core::BackendOps は本クレートから再エクスポートしない (fandhe_ai::Tape::new_with_ops(ops) という経路がサポート面に露出すると 「任意 BackendOps 実装を注入できる公開 API を設けない」(REQ-12)と 矛盾するため)。この制約は tests/api_surface.rs がソース走査で 機械的に固定する。

Tape(composition root が構築する値)の扱い(codex-review PR #424 P1 是正): tape・tape_for の戻り値は fandhe_ai_autodiff::Tape を そのまま返すのではなく、本クレート所有の newtype Tape でラップする。 fandhe_ai_autodiff::Tape を素通しすると Tape::new_with_ops という BackendOps 注入経路が facade 型として到達可能になり REQ-12 と矛盾する ため、Tape は Tape::var/Tape::backward の 2 メソッドのみを 再委譲する(構築は tape/tape_for 経由のみで、fandhe_ai_autodiff::Tape の任意構築経路は到達不能なまま)。compat::Sequential::forward/ compat::Sequential::bind もこの Tape 型を引数に取る(旧実装は fandhe_ai_autodiff::Tape を直に引数へ取っており、内部クレートの型が facade の 公開シグネチャへ直接露出していた。codex-review 指摘)。

TapeRef(#2394。nn::Module::forward の第 1 引数)は var/var_from/var_no_grad のみを持つ借用ハンドルで、 Tape の公開メソッドは変えない。crate 外の入口は From<&Tape> のみ。

TapeF64/VarF64/GradientsF64(#2599)は f64 専用の独立自動微分グラフで、 3 型とも本クレート所有の newtype(docs/autodiff-var-dtype-multiplexing-design.md §4.1・§10.1 の推奨案 D-2)。構築は TapeF64::new(facade Tape の借用)のみ。

Var/Gradients/AutodiffError/LinearVars(autodiff 由来)・ Tensor(tensor_core 由来)の扱い: これらは BackendOps 注入の 迂回経路を持たない値型・エラー型であるため、facade の正式な公開契約 として本クレートから再エクスポートする(下記 pub use)。 compat::{array, Sequential} の公開シグネチャはこの再エクスポート パス(crate::{AutodiffError, Tensor} 等)を使う。

§Device::Cuda(_)/Device::Metal の構築規則

spec は本規則を「TASK-9.3 実装時にユーザー承認を得て確定」とする 未決事項として残しているため、以下の最小・自明な規則を採用した (イシュー #410 実装計画 §2-2。PR 本文でユーザー確認を仰ぐ)。

  • Device::Cpu → CpuBackendOps::new()(常に利用可能なため検証不要)。
  • Device::Cuda(ordinal) → CudaDeviceProvider::select で存在検証 (driver 不在・範囲外 ordinal は BackendError を返す fail-fast) したうえで CudaBackendOps::new(ordinal) を構築する。イシュー #929: CudaBackendOps の各演算メソッドは backend-cuda 側のプロセス内 キャッシュ(crate::context_cache。ordinal キー)を経由するため、 同一プロセス内で 2 回目以降に tape_for(Device::Cuda(_)) を呼んでも CudaContext 生成・NVRTC コンパイルは再実行されない。resolve_ops 自体(この関数)は毎回新しい CudaBackendOps/Tape を構築する 軽量な値であり、重い初期化コストはバックエンド側キャッシュが吸収する。
  • Device::Metal(cfg(target_os = "macos"))→ MetalDeviceProvider::select で検証したうえで MetalBackendOps::new() を構築する。

既定デバイスの自動選択(GPU フォールバック等)・デバイス列挙の集約入口 (Device::available() 相当の facade 結線)は本イシューのスコープ外 (docs/public-api-design.md §4.1 の未決事項を尊重。 out-of-scope-tracking.md 対象)。

Modules§

compat
numpy/Keras 慣習の互換 API 層(compat 公開面。TASK-9.4・#411)。 compat::array・compat::Sequential を提供する(詳細はモジュール doc・docs/compat-api-scope.md 参照)。 numpy/Keras 慣習の互換 API 層(REQ-9・TASK-9.4・イシュー #411)。
data
Dataset/DataLoader 公開面(イシュー #1615・親 #1602)。map-style データセット(data::Dataset・data::TensorDataset)とミニ バッチ供給(data::DataLoader・data::DataLoaderConfig)を 再エクスポートする(詳細はモジュール doc・docs/dataset-dataloader- design.md 参照)。 Dataset/DataLoader 公開面(イシュー #1615・親 #1602。docs/ dataset-dataloader-design.md)。
distributed
分散学習(DDP の初期形)の公開モジュール。
inference
バッチ推論(Sequential::predict_batches)と推論フェーズ計測の公開面 (イシュー #2192・#2582・親 #2131・#2581)。
interop
相互運用(interop)公開面の入口(イシュー #2017・#2018・#2019)。 interop::onnx(ONNX import/export。OnnxModel/OnnxValue/ OnnxError・OnnxModel::{from_bytes, from_path, from_path_with_limits, run, to_bytes, to_path}・OnnxExportOptions・OnnxExternalDataLimits 〈external data 読み込み予算。#2360〉。export は 2 経路で、to_bytes/to_path は import 済みモデルの roundtrip export〈#2018〉、OnnxModel::from_sequential は compat::Sequential の対応 6 層〈Linear/ReLU/Softmax/LayerNorm/ GELU〈erf 版〉/Conv2d。#2037・#2076〉から ONNX グラフを組み立てる。対応外の層は UnsupportedLayer で拒否する。docs/facade-onnx-export-exposure-decision.md §17) に加え、interop::safetensors(safetensors save/load 純再エクスポート。イシュー #2019)と interop::npy(npy/npz 読み書き純再エクスポート。イシュー #2590)を提供する (docs/facade-onnx-export-exposure-decision.md・docs/facade- safetensors-exposure-decision.md)。 相互運用(interop)公開面(イシュー #2017・#2018・#2019)。
model
model 公開面(model。イシュー #2087・親 #2082): ホーム ディレクトリ配下のキャッシュディレクトリを基盤とするローカル 限定モデルレジストリ model::ModelRegistry を提供する。 ホスト側のパス管理と interop::safetensors への委譲のみで 完結し BackendOps 注入経路を新設しないため REQ-12 と矛盾しない (詳細は model モジュール doc・ docs/facade-model-registry-decision.md 参照)。 ローカルモデルレジストリ公開面(イシュー #2087・親 #2082)。
models
参照モデル(PyTorch の定番モデル)の公開モジュール。
nn
nn 公開面(イシュー #1955)。nn::rnn (Rnn/Lstm/Gru と多層版 Stacked*・RnnConfig の Sequence レベル API の純再エクスポート)と、 facade 独自の nn::Module(#2395)を提供する。forward_seq の呼び出しには Tape::rnn_forward_seq 等(本モジュール自体ではなく impl Tape の薄い委譲メソッド)を 使う(詳細は nn::rnn モジュール doc 参照)。 nn 公開面の入口(イシュー #1955)。
optim
optimizer 公開面(イシュー #961・親 #960。Adam は #1742・RMSprop/ Adagrad は #1743・親 #1610・LAMB は #1744)。SGD・AdamW・Adam・RMSprop・ Adagrad・LAMB・gradient clipping・LR スケジューラを再エクスポートする(詳細・ 適用順序契約はモジュール doc 参照)。 optimizer 公開面(イシュー #961・親 #960。設計判断 docs/facade-optimizer-promotion-decision.md §4 案 A「素の再エクスポート」)。
text
語彙 lookup 型のテキスト変換(Keras TextVectorization 相当)。

Structs§

CreateGraphResult
Tape::backward_create_graph の戻り値。1 階勾配 (Self::first_order。既存 backward_impl の無変更な結果)に 加え、子テープ 'c 上に構築した「元テープの祖先ノードの写し」 (Self::child_var)と「その 1 階勾配(子テープ上の Var)」 (Self::grad)を保持する。
DeviceParamStore
デバイス常駐パラメータ更新の状態機械本体(モジュール冒頭コメント 参照)。単一デバイス固定(new() 時に tape.ops().device() から 決定し、以後変更不可)。Debug は unwrap_err()(テストコード)が Result<DeviceParamStore, _> を要求するため導出する(フィールドは いずれも Debug 実装済み: Device/DeviceBuffer<f32>(tensor-core 側で導出済み)/ParamLayout/PendingForward〈上記〉/ AtomicBool/DispatchFailureCell)。
EighVars
eigh の戻り値(多出力。Var::qr〈var.rs::QrVars〉と同型)。 Copy にはしない——Var<'t> 自体が Copy ではないため (QrVars/SvdVars も非 Copy)。
GemmChecksum
BackendOps::gemm_checksum の戻り値。checksum は C = A@B (論理領域 m×n)の全要素和を f64(Metal は Neumaier 補償和で f64 相当)アキュムレータ・固定順序で求めた値(決定的。同一入力・ 同一カーネル選択であれば bit 決定的に同じ値を返す契約。CPU/CUDA/ Metal の各実装 doc 参照)。output は ChecksumReadout::WithOutput のときのみ Some(BackendOps::gemm と bit 同一の Tensor<f32>)。
Generator
プロセスグローバルな RNG(manual_seed/with_global_rng)とは 完全に独立した状態を持つ乱数源(PyTorch torch.Generator 相当。 イシュー #2156・親 #2131)。
GradcheckOptions
gradcheck のアルゴリズム引数。Default は実装しない(閾値を暗黙に決めない)。 フィールドは非公開で、構築は GradcheckOptions::new(有限かつ正を fail-closed 検査)のみ。
GradcheckReport
gradcheck の結果。不一致は Err ではなく passed() == false の Ok で返す。 最悪要素は絶対誤差が最大の要素(非有限は無限大として扱い、同値なら最初のもの)。
Gradients
Tape::backward が返す勾配の入れ物。Var 単位で get() から 引ける(docs/public-api-design.md §3.1)。
GradientsF64
TapeF64::backward の結果(葉ごとの f64 勾配)。
HookHandle
Tape::register_backward_hook が返す解除ハンドル(Tape::remove_hook へ値で渡す)。
IstftOptions
istft のオプション(torch.istft の hop_length/win_length/center/ normalized/onesided/length 引数相当)。PyTorch 既定を Default と する。StftOptions と同じく #[non_exhaustive]・with_* ビルダ方式。
JvpCreateGraphResult
jvp_create_graph の結果(イシュー #3067・設計記録 §31.1)。孫テープ上の追跡された J·v と、 元テープの Var から孫テープ上の写し(親→子→孫の 2 段合成)を引く対応表を持つ。 公開型に出るライフタイムは孫テープの 'g だけ(1 段目の子テープは関数内に閉じる)。
LinearVars
Linear::bind が返す、1 ステップ分のテープに登録済みパラメータ。 weight/bias を公開する理由: Tape::backward 後に Gradients::get(&vars.weight) で勾配を取り出すのは呼び出し側 (optimizer。#192・本イシューではスコープ外)の責務であり、 LinearVars 自身は勾配更新 API を持たない。
PoolStats
[SizeClassPool] の統計スナップショット(POD。ハンドル・ポインタ・ trait object を一切含まない。設計文書 §3.1「フィールド更新契約」表が 各フィールドの増減規則の正)。
QrFactors
BackendOps::linalg_qr の戻り値(イシュー #1621。docs/ autodiff-linalg-design.md)。torch.linalg.qr(mode="reduced") と 同じ reduced QR(A: [m,n] → q: [m,k]・r: [k,n]、k = min(m,n))。 r の対角は非負に正規化する(fandhe_ai_autodiff::eval::linalg と本クレートの実装が同一符号規約を採る契約。設計文書 §3.5「符号・ ゲージ規約」)。フィールドは pub(MseReduction/Activation の ような #[non_exhaustive] enum ではなく、バックエンド実装が値を 直接構築する struct のため。GemmChecksum と同方針)。
QrVars
Var::qr の戻り値。Q([m,k])・R([k,n])は別テープノード (多出力設計。Op::QrQ/Op::QrR doc 参照)。
ResidentLeaf
DeviceParamStore::register_resident_params/ DeviceParamStore::snapshot_resident_params が返す、テープ上の Op::ResidentLeaf ノードへの不透明なハンドル(イシュー #1022・ #1023「R3: 要素オフセット付き常駐ビュー」)。
ResidentLoss
学習 1 step の loss(デバイス常駐スカラー)の不透明ハンドル(イシュー #3254 P6。公開形の決定は docs/compat-resident-train-step-decision.md §4)。
ResidentTensor
デバイスに常駐する入力テンソルの不透明ハンドル(イシュー #3250 P1。公開形の決定は docs/compat-resident-train-step-decision.md §4)。
SgdConfig
SGD のハイパーパラメータ。フィールド名・既定値は torch.optim.SGD と揃える(fixture 突合時に対応関係を読み違えないため)。
SlogdetVars
slogdet の戻り値(多出力)。
SpectralNormState
spectral_norm の非追跡状態(u: [h]・v: [w])と設定。h = shape[dim]・w = numel / h。
StftOptions
stft のオプション(torch.stft の hop_length/win_length/center/ pad_mode/normalized/onesided 引数相当)。PyTorch 既定を Default と する。非破壊拡張に備え #[non_exhaustive]・with_* ビルダ方式を採る。
SvdFactors
BackendOps::linalg_svd の戻り値(イシュー #1621)。 torch.linalg.svd(A, full_matrices=False) と同じ reduced SVD (A: [m,n] → u: [m,k]・s: [k]・vh: [k,n]、k = min(m,n))。 s は降順(同値は安定ソート)に正規化する契約(設計文書 §3.5)。
SvdVars
Var::svd の戻り値。U([m,k])・S([k])・Vh([k,n])は 別テープノード(多出力設計。Op::SvdU/Op::SvdS/Op::SvdVh doc 参照)。
Tape
composition root(tape/tape_for)が構築する Tape の newtype ラッパー(codex-review PR #424 P1 是正)。
TapeF64
f64 専用の独立自動微分グラフのテープ(f32 の Tape とは別の添字空間)。
TapeRef
autodiff コンテナ内で facade 独自層へ渡す、var 系メソッドのみの借用ハンドル。
Tensor
テンソル本体。storage を複数の Tensor が共有することで view 系操作(transpose/narrow/reshape の contiguous ケース)を データコピーなしで表現する。
TopkOptions
topk_with_options のオプション(torch.topk の dim/ largest/sorted 引数相当)。PyTorch 既定(dim=-1・ largest=true・sorted=true)を Default とする。将来の 非破壊拡張に備え #[non_exhaustive]・with_* ビルダ方式を採る。
UniqueOptions
unique_with_options/unique_consecutive のオプション (torch.unique/torch.unique_consecutive の dim/ return_inverse/return_counts 引数相当)。既定(dim=None・ 追加出力なし)を Default とする。
UniqueOutput
unique_with_options/unique_consecutive の戻り値。要求 されなかった出力(return_inverse/return_counts が false)は None。非微分・detached(Var::unique と同型の理由。モジュール doc 参照)。
Var
テープ上の 1 ノードを指す追跡対象値。値そのものではなく NodeId + テープへの共有参照を保持し、演算のたびにテープへ新しいノードを 追加する(docs/public-api-design.md §3.1)。
VarF64
TapeF64 上の f64 変数(Copy なハンドル)。
VarHostView
Var::host_view が返す借用ビュー(イシュー #1335。P1 是正で Tape の借用を保持しない設計へ変更——Var::host_view ドキュメント コメント参照)。

Enums§

AutodiffError
autodiff の公開 API が返すエラー型。
BackendError
バックエンド抽象層のエラー型(docs/public-api-design.md §4.4 を実装。 DeviceUnavailable variant はモジュール冒頭に記載のとおり本イシューで 追加した拡張)。
CastDType
cast 対象 dtype のタグ(イシュー #1750)。
ChecksumReadout
BackendOps::gemm_checksum の読み戻しモード(イシュー #1339)。
CreationError
arange/linspace 専用のエラー型。shape(要素数)起因の 不整合は Tensor::zeros 等と同じ ShapeError へ委譲し (From<ShapeError> 実装)、引数自体の不正(step == 0・非有限値) は ShapeError の対象外であるため本型で新設する (rng::RngError と同型の設計。イシュー #1726)。
CudaGemmPrecision
CUDA GEMM 精度モード(既定 Fp32Strict・単発 Tf32・3×TF32 Tf32x3。イシュー #1355。親ツリー #1354・承認元 #1338)の再公開。 set_cuda_gemm_precision/cuda_gemm_precision の戻り値・引数型 として使う(fandhe_ai_backend_cuda::precision::CudaGemmPrecision の 薄い再公開。PoolStats と同じ前例)。 CUDA GEMM(CudaBackendOps::gemm)が使う精度モード(イシュー #1355。3 択)。
Device
実行先デバイス(docs/public-api-design.md §4.1 のシグネチャをそのまま 実装)。
EmbeddingBagMode
bag 単位の縮約方法(torch.nn.EmbeddingBag(mode=..) 相当)。 #[non_exhaustive]: 将来 Sum/Mean/Max 以外の縮約 (PyTorch には存在しないが本クレート独自の拡張余地)を非破壊で 追加できるようにする(fandhe-ai-autodiff は crates.io 公開クレート。 docs/crates-io-naming-decision.md)。
FftNorm
FFT の正規化種別(torch.fft の norm 引数相当)。
GlobalPoolMode
GlobalPool の集約方式(イシュー #2160)。ONNX GlobalAveragePool/ GlobalMaxPool、Keras GlobalAveragePooling*/GlobalMaxPooling* 相当を単一の型 GlobalPool へ集約するための variant。 #[non_exhaustive] により将来の variant 追加(例: GlobalLp)を 破壊的変更なしで行えるようにする(docs/compat-api-scope.md の 非破壊拡張方針)。facade ルートから fandhe_ai::GlobalPoolMode として 再エクスポート済み(イシュー #2527。compat::Sequential::add_global_pool の引数型。GlobalPool 層型自体の再エクスポートは未承認)。
InterpolateMode
BackendOps::interpolate が適用するリサンプリング方式(イシュー #1757)。現時点では Nearest(最近傍)のみ持つが、後続 #1762 (bilinear)が同じ足場(Op::Interpolate/BackendOps::interpolate) を共有できるよう enum で受ける設計とする。
MatrixNormOrd
BackendOps::linalg_matrix_norm が計算する行列ノルムの種類 (イシュー #1621。torch.linalg.matrix_norm の ord 引数のうち facade が対応する 5 種)。
MeshgridIndexing
meshgrid の座標生成規約(torch.meshgrid の indexing)。
PadMode
非定数パディングのモード(F.pad の mode。定数埋めは既存 Var::pad)。
QuantileInterpolation
quantile の補間方式(torch.quantile の interpolation 相当)。
RngError
randint 専用のエラー型。shape 起因の不整合(要素数オーバー フロー等)は Tensor::zeros 等と同じ ShapeError へ委譲し (From<ShapeError> 実装)、low >= high という範囲自体の不正は ShapeError の対象外(shape 不整合限定。crates/tensor-core/src/error.rs の ShapeError variant 一覧参照)であるため本型で新設する (イシュー #1725)。bernoulli/multinomial/normal・ Generator(イシュー #2156)も同じ型を再利用し、確率・重み・ mean/std の検証違反用に variant を追加する(下記)。
ScalarDType
演算対象 dtype のタグ(イシュー #1687)。
ScatterReduceMode
scatter_reduce の縮約種別(torch.scatter_reduce の reduce 相当)。
ShapeError
テンソル生成・view 操作・reshape の shape 不整合を表す。
StftPadMode
stft の center = true 時の端パディング種別(pad_mode 相当)。

Traits§

CastElement
cast 対象になりうる dtype の capability 境界(イシュー #1750)。
CustomFunction
ユーザー定義の forward/backward 対(docs/autodiff-custom-function- decision.md §12.4)。crate::Tape::custom(tape.rs)経由で テープへ登録する唯一の実装口。
Scalar
演算対象になりうる dtype の capability 境界(イシュー #1687)。
TypedOps
dtype 別の演算本体(イシュー #1687)。

Functions§

arange
[start, end) を step 刻みで並べたテンソルを生成する(PyTorch torch.arange 相当。イシュー #1726)。randn/rand/ randint と同じくホスト側だけで完結し BackendOps を経由しない (Op/VJP も追加しない。微分不能な葉値のため)。数値契約 (プラットフォーム横断で bit 同一)は fandhe_ai_tensor_core::creation モジュール doc 参照。
available_devices
実行時に利用可能な Device を列挙する(docs/public-api-design.md §4.1 Device::available() の集約入口。イシュー #1614。TASK-1.9a (#44。tensor-core::device モジュール doc)が「集約入口をどの層で 結線するかは後続イシューへ引き継ぐ」としていた未決事項をここで解消 する)。
bernoulli
確率テンソル probs の各要素を成功確率とするベルヌーイ試行を行い、 0.0/1.0 の f32 テンソルを返す(PyTorch torch.bernoulli 相当。 イシュー #2593)。fandhe_ai_autodiff::bernoulli(実体は fandhe_ai_tensor_core::rng::bernoulli)への薄い委譲で、ホスト側だけで 完結し BackendOps を経由しない。manual_seed が設定したグローバル RNG を消費する(独立した乱数源が必要なら Generator を使う)。
cuda_elementwise_fusion_enabled
CUDA の elementwise 融合 opt-in の現在状態を返す (set_cuda_elementwise_fusion_enabled 参照。イシュー #3385)。
cuda_gemm_precision
set_cuda_gemm_precision で設定した現在の精度モードを返す (既定 CudaGemmPrecision::Fp32Strict)。
cuda_graph_infer_enabled
推論チェーン capture の現在の opt-in 状態を返す (set_cuda_graph_infer_enabled 参照。イシュー #3116)。
cuda_graph_step_enabled
set_cuda_graph_step_enabled で設定した現在の opt-in 状態を返す (既定 false)。
cuda_graph_step_mode
現在の CUDA Graph step capture の opt-in モードを返す(イシュー #1350。CudaGraphStepMode 参照)。
cuda_graph_step_stats
launch 固定費の診断用スナップショットを返す(イシュー #1350。 CudaGraphStepStats 参照)。計測ウィンドウの外(framework-compare の record 生成時)で 1 回だけ呼ぶことを想定しており、呼び出し自体は 計測時間へ計上されない設計(fandhe_ai_backend_cuda::graph:: step_graph_stats doc コメント参照)。
cuda_managed_memory_enabled
set_cuda_managed_memory_enabled で設定した現在の opt-in 状態を 返す(既定 false)。
cuda_onnx_gpu_execution_enabled
set_cuda_onnx_gpu_execution_enabled で設定した現在の opt-in 状態を 返す(既定 false)。
cuda_pinned_h2d_enabled
set_cuda_pinned_h2d_enabled で設定した現在の opt-in 状態を返す (既定 false)。
cuda_tf32_gemm_enabled
set_cuda_tf32_gemm_enabled で設定した現在の opt-in 状態を返す (既定 false)。
eye
n x n の単位行列を生成する(PyTorch torch.eye 相当。長方形版は 対象外。イシュー #1726)。dtype は f32 固定(facade 公開面は他の 生成系トップレベル関数と同じく f32 限定。汎用版は fandhe_ai_tensor_core::creation::eye::<T> を参照)。
is_deterministic
set_deterministic で設定した決定論モードの現在値を返す(既定 false。イシュー #2507)。fandhe_ai_autodiff::determinism:: is_deterministic への薄い委譲で、保証範囲・no-op 契約は set_deterministic を参照。
linspace
[start, end](両端を含む)を steps 個の等間隔値で埋めたテンソルを 生成する(PyTorch torch.linspace 相当。イシュー #1726)。設計・ 到達経路は arange と同じ。
logical_and
要素ごとの論理積(PyTorch torch.logical_and の bool 入力版。イシュー #2596・親 #2594)。NumPy 互換ブロードキャストに対応し、非微分・tape 非記録のホスト計算である。
logical_not
要素ごとの否定(PyTorch torch.logical_not の bool 入力版。イシュー #2596)。契約は logical_and と同じ。巨大 broadcast view は確保前の 要素数検査で AutodiffError::Shape(..) になる(panic しない)。
logical_or
要素ごとの論理和(PyTorch torch.logical_or の bool 入力版。イシュー #2596)。契約は logical_and と同じ(ブロードキャスト・非微分・ AutodiffError::Shape(..))。
manual_seed
PyTorch torch.manual_seed 相当。プロセス全体で共有されるグローバル 決定的 RNG(randn/rand/randint が消費する。#1602 本文の 設計方針どおりホスト生成のみで BackendOps は経由しない)の状態を seed からやり直す(イシュー #1724)。
memory_pool_stats
device のデバイスメモリプールの統計スナップショット(診断用。 イシュー #1020・#1021)。POD PoolStats のみを返し、内部ハンドル 表現は含まない(docs/device-memory-pool-design.md §3.1「facade からの再公開」)。プールを持たないバックエンドは Ok(None) (BackendOps::device_memory_pool_stats の既定実装)。存在しない デバイス・範囲外 ordinal・driver 不在は release_cached_memory と同じく BackendError を返す。
multinomial
重み weights(rank 1 または 2)に比例するカテゴリ抽出を行い、添字の i32 テンソルを返す(PyTorch torch.multinomial 相当。イシュー #2593)。設計・到達経路・乱数源は bernoulli と同じ。
normal
平均 mean・標準偏差 std の正規分布に従う乱数テンソルを生成する (PyTorch torch.normal(mean, std, size) のスカラー版相当。イシュー #2593)。設計・到達経路は bernoulli と同じ。
ones_like
like と同じ shape・全要素 1.0 の新規テンソルを生成する(PyTorch torch.ones_like 相当。イシュー #1726)。契約は zeros_like と 同じ。
rand
[0, 1) の一様分布に従う乱数テンソルを生成する(PyTorch torch.rand 相当。イシュー #1725)。設計・到達経路は randn と同じ。整数演算 のみで構成されるためプラットフォーム横断で bit 同一の決定性を持つ (fandhe_ai_tensor_core::rng モジュール doc 参照)。
randint
[low, high) の一様分布に従う整数乱数テンソルを生成する(PyTorch torch.randint 相当。イシュー #1725)。dtype は i32 (本リポの index/targets 型契約に合わせた意図的な差異。 docs/rng-global-contract-design.md)。low >= high は RngError::InvalidRange を返す。
randn
標準正規分布 N(0, 1) に従う乱数テンソルを生成する(PyTorch torch.randn 相当。イシュー #1725)。manual_seed が設定した プロセスグローバル決定的 RNG をホスト側だけで消費し(BackendOps を 経由しない。#1602 本文の設計方針)、返る Tensor は Tape::var で任意のデバイスへアップロードできる。
release_cached_memory
REQ-14 の明示解放 API(イシュー #1018 ツリー・#1020 CUDA・#1021 Metal)。device に対応するバックエンドのデバイスメモリプール (backend-cuda/backend-metal のサイズクラス別プール実装)が アイドル保持している分を即座に実解放する。プールを持たない バックエンド(CPU 等)は何もせず Ok(()) を返す(BackendOps:: release_cached_device_memory の既定契約。docs/device-memory-pool- design.md §3.1「facade からの再公開」)。
set_cuda_elementwise_fusion_enabled
GPU run_fused の elementwise allowlist 融合(区分 B-1)を CUDA で opt-in 有効/無効にする(イシュー #2085 が機構・#3115 が公開形・#3385 が 公開。公開形の正は docs/facade-graph-tier-b-optin-exposure-decision.md §3・§13)。
set_cuda_gemm_precision
CUDA GEMM(fandhe_ai::tape().var(a).matmul(b) 等が最終的に到達する CudaBackendOps::gemm)の精度モードを設定する(イシュー #1355。 set_cuda_tf32_gemm_enabled の 3 モード拡張版・同型の composition root 委譲)。
set_cuda_graph_infer_enabled
推論 forward チェーンの CUDA Graph capture を opt-in で有効/無効にする (イシュー #2115 が機構・#3115 が公開形・#3116 が公開。公開形の正は docs/facade-graph-tier-b-optin-exposure-decision.md §3・§4)。
set_cuda_graph_step_enabled
学習 step の update 区間(BackendOps::sgd_step_device_tracked)を CUDA Graph で capture・再利用する経路を opt-in で有効化・無効化する (イシュー #1349。親 #1348・ルート #1341 → #1269)。
set_cuda_managed_memory_enabled
CUDA DeviceBuffer の確保配置(alloc_zeroed/upload)を managed memory(cuMemAllocManaged)へ opt-in で切り替える(イシュー #1352。 親 #1351「GB10 物理統合メモリ向けゼロコピー割当の試作・実測」)。
set_cuda_onnx_gpu_execution_enabled
crate::interop::onnx::OnnxModel::run の GPU 実行(CUDA)を opt-in で有効化・無効化する(イシュー #2077。docs/onnx-gpu-execution- decision.md)。
set_cuda_pinned_h2d_enabled
CUDA H2D(ホスト→デバイス転送)を、pageable ホストメモリからの直接 転送ではなく pinned(page-locked)ステージングバッファ経由で発行する opt-in スイッチ(イシュー #1585。低レイヤー診断 docs/perf/lowlayer-diagnosis-2026-09-12.md §7 表 B-3 行で起票された 候補)。
set_cuda_tf32_gemm_enabled
CUDA GEMM(fandhe_ai::tape().var(a).matmul(b) 等が最終的に到達する CudaBackendOps::gemm)の TF32 Tensor Core 経路を opt-in で有効化・ 無効化する(イシュー #1042。親ツリー #1029 Phase 2)。
set_deterministic
PyTorch torch.use_deterministic_algorithms 相当の決定論モードを プロセス全体で切り替える(イシュー #2507。実装は #2157)。既定は false(opt-in)。
tape
既定バックエンド(CPU・TASK-2.5 ユーザー承認済み。 docs/public-api-design.md:429)で Tape を構築する。
tape_for
指定した Device へ明示的に結線した Tape を構築する。
zeros_like
like と同じ shape・全要素 0.0 の新規テンソルを生成する(PyTorch torch.zeros_like 相当。イシュー #1726)。like が転置・broadcast 由来の非 contiguous view であっても shape のみを引き継ぎ、strides は保存しない新規 contiguous バッファを返す (fandhe_ai_tensor_core::creation モジュール doc 参照)。

Type Aliases§

CudaGraphStepMode
fandhe_ai_backend_cuda::graph::StepGraphMode の再公開(composition root。イシュー #1350)。framework-compare の bench-fandhe が --graph stream-only 起動時に「環境変数 FANDHE_AI_CUDA_GRAPH_STEP= stream-only が実際に反映されたか」を確認するために使う診断用途の 公開面(docs/compat-api-scope.md §0)。set_cuda_graph_step_enabled と異なり API からモードを設定する手段はない(stream-only は環境 変数専用の中間状態。fandhe_ai_backend_cuda::graph モジュール冒頭 コメント参照)。
CudaGraphStepStats
fandhe_ai_backend_cuda::graph::StepGraphStats の再公開(同上。 launch 固定費の診断用スナップショット)。