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 確定内容)。
-
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は具体クレートへの依存を一切持たない」)を、 上位でここに一本化する。 -
compat 公開面(
compat::array/compat::Sequential): TASK-9.4(イシュー #411)でfandhe_ai_autodiff::compatから本クレートへ 移設し実装済み。サポート境界の明文化(facadeが唯一のサポート 対象公開 API 面でありtensor-core/autodiff/backend-*は 内部クレート)はdocs/compat-api-scope.mdを参照。 -
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)。 -
data 公開面(
data。イシュー #1615・親 #1602): map-style データセット(Dataset/TensorDataset)とミニバッチ供給 (DataLoader/DataLoaderConfig)をfandhe_ai::dataの単一 入口へ再エクスポートする。ホスト側だけで完結しOp/BackendOps/VJP を経由しないため REQ-12 と矛盾しない(詳細はdataモジュール doc)。 -
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配下に、PyTorchtorch.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)。 -
model 公開面(
model。イシュー #2087・親 #2082): ホームディレクトリ配下のキャッシュディレクトリを基盤とする ローカル限定モデルレジストリmodel::ModelRegistryを提供 する。ホスト側のパス管理とinterop::safetensorsへの委譲 のみで完結しBackendOps注入経路を新設しないため REQ-12 と 矛盾しない(詳細はmodelモジュール doc・docs/facade- model-registry-decision.md参照)。 -
text 公開面(
text。イシュー #2937・親 #2935): 語彙 lookup 型のテキスト変換text::TextVectorization(KerasTextVectorization相当。文字列バッチを[B, L]のTensor<i32>へ変換する)。ホスト側の処理のみで完結しBackendOps注入経路を新設しないため REQ-12 と矛盾しない (標準化・分割は ASCII 限定。詳細はtextモジュール doc・docs/facade-text-vectorization-design.md§16 参照)。 -
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§
- Create
Graph Result Tape::backward_create_graphの戻り値。1 階勾配 (Self::first_order。既存backward_implの無変更な結果)に 加え、子テープ'c上に構築した「元テープの祖先ノードの写し」 (Self::child_var)と「その 1 階勾配(子テープ上のVar)」 (Self::grad)を保持する。- Device
Param Store - デバイス常駐パラメータ更新の状態機械本体(モジュール冒頭コメント
参照)。単一デバイス固定(
new()時にtape.ops().device()から 決定し、以後変更不可)。Debugはunwrap_err()(テストコード)がResult<DeviceParamStore, _>を要求するため導出する(フィールドは いずれもDebug実装済み:Device/DeviceBuffer<f32>(tensor-core側で導出済み)/ParamLayout/PendingForward〈上記〉/AtomicBool/DispatchFailureCell)。 - Eigh
Vars eighの戻り値(多出力。Var::qr〈var.rs::QrVars〉と同型)。Copyにはしない——Var<'t>自体がCopyではないため (QrVars/SvdVarsも非Copy)。- Gemm
Checksum 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)とは 完全に独立した状態を持つ乱数源(PyTorchtorch.Generator相当。 イシュー #2156・親 #2131)。 - Gradcheck
Options gradcheckのアルゴリズム引数。Defaultは実装しない(閾値を暗黙に決めない)。 フィールドは非公開で、構築はGradcheckOptions::new(有限かつ正を fail-closed 検査)のみ。- Gradcheck
Report gradcheckの結果。不一致はErrではなくpassed() == falseのOkで返す。 最悪要素は絶対誤差が最大の要素(非有限は無限大として扱い、同値なら最初のもの)。- Gradients
Tape::backwardが返す勾配の入れ物。Var単位でget()から 引ける(docs/public-api-design.md§3.1)。- Gradients
F64 TapeF64::backwardの結果(葉ごとの f64 勾配)。- Hook
Handle Tape::register_backward_hookが返す解除ハンドル(Tape::remove_hookへ値で渡す)。- Istft
Options istftのオプション(torch.istftのhop_length/win_length/center/normalized/onesided/length引数相当)。PyTorch 既定をDefaultと する。StftOptionsと同じく#[non_exhaustive]・with_*ビルダ方式。- JvpCreate
Graph Result jvp_create_graphの結果(イシュー #3067・設計記録 §31.1)。孫テープ上の追跡されたJ·vと、 元テープのVarから孫テープ上の写し(親→子→孫の 2 段合成)を引く対応表を持つ。 公開型に出るライフタイムは孫テープの'gだけ(1 段目の子テープは関数内に閉じる)。- Linear
Vars Linear::bindが返す、1 ステップ分のテープに登録済みパラメータ。weight/biasを公開する理由:Tape::backward後にGradients::get(&vars.weight)で勾配を取り出すのは呼び出し側 (optimizer。#192・本イシューではスコープ外)の責務であり、LinearVars自身は勾配更新 API を持たない。- Pool
Stats - [
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::QrRdoc 参照)。- Resident
Leaf DeviceParamStore::register_resident_params/DeviceParamStore::snapshot_resident_paramsが返す、テープ上のOp::ResidentLeafノードへの不透明なハンドル(イシュー #1022・ #1023「R3: 要素オフセット付き常駐ビュー」)。- Resident
Loss - 学習 1 step の loss(デバイス常駐スカラー)の不透明ハンドル(イシュー #3254 P6。公開形の決定は
docs/compat-resident-train-step-decision.md§4)。 - Resident
Tensor - デバイスに常駐する入力テンソルの不透明ハンドル(イシュー #3250 P1。公開形の決定は
docs/compat-resident-train-step-decision.md§4)。 - SgdConfig
- SGD のハイパーパラメータ。フィールド名・既定値は
torch.optim.SGDと揃える(fixture 突合時に対応関係を読み違えないため)。 - Slogdet
Vars slogdetの戻り値(多出力)。- Spectral
Norm State - spectral_norm の非追跡状態(
u:[h]・v:[w])と設定。h = shape[dim]・w = numel / h。 - Stft
Options 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::SvdVhdoc 参照)。- 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 ケース)を データコピーなしで表現する。 - Topk
Options topk_with_optionsのオプション(torch.topkのdim/largest/sorted引数相当)。PyTorch 既定(dim=-1・largest=true・sorted=true)をDefaultとする。将来の 非破壊拡張に備え#[non_exhaustive]・with_*ビルダ方式を採る。- Unique
Options unique_with_options/unique_consecutiveのオプション (torch.unique/torch.unique_consecutiveのdim/return_inverse/return_counts引数相当)。既定(dim=None・ 追加出力なし)をDefaultとする。- Unique
Output 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なハンドル)。- VarHost
View Var::host_viewが返す借用ビュー(イシュー #1335。P1 是正でTapeの借用を保持しない設計へ変更——Var::host_viewドキュメント コメント参照)。
Enums§
- Autodiff
Error autodiffの公開 API が返すエラー型。- Backend
Error - バックエンド抽象層のエラー型(
docs/public-api-design.md§4.4 を実装。DeviceUnavailablevariant はモジュール冒頭に記載のとおり本イシューで 追加した拡張)。 - CastD
Type - cast 対象 dtype のタグ(イシュー #1750)。
- Checksum
Readout BackendOps::gemm_checksumの読み戻しモード(イシュー #1339)。- Creation
Error arange/linspace専用のエラー型。shape(要素数)起因の 不整合はTensor::zeros等と同じShapeErrorへ委譲し (From<ShapeError>実装)、引数自体の不正(step == 0・非有限値) はShapeErrorの対象外であるため本型で新設する (rng::RngErrorと同型の設計。イシュー #1726)。- Cuda
Gemm Precision - CUDA GEMM 精度モード(既定
Fp32Strict・単発Tf32・3×TF32Tf32x3。イシュー #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 のシグネチャをそのまま 実装)。 - Embedding
BagMode - 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引数相当)。 - Global
Pool Mode - GlobalPool の集約方式(イシュー #2160)。ONNX
GlobalAveragePool/GlobalMaxPool、KerasGlobalAveragePooling*/GlobalMaxPooling*相当を単一の型GlobalPoolへ集約するための variant。#[non_exhaustive]により将来の variant 追加(例:GlobalLp)を 破壊的変更なしで行えるようにする(docs/compat-api-scope.mdの 非破壊拡張方針)。facade ルートからfandhe_ai::GlobalPoolModeとして 再エクスポート済み(イシュー #2527。compat::Sequential::add_global_poolの引数型。GlobalPool層型自体の再エクスポートは未承認)。 - Interpolate
Mode BackendOps::interpolateが適用するリサンプリング方式(イシュー #1757)。現時点ではNearest(最近傍)のみ持つが、後続 #1762 (bilinear)が同じ足場(Op::Interpolate/BackendOps::interpolate) を共有できるよう enum で受ける設計とする。- Matrix
Norm Ord BackendOps::linalg_matrix_normが計算する行列ノルムの種類 (イシュー #1621。torch.linalg.matrix_normのord引数のうち facade が対応する 5 種)。- Meshgrid
Indexing meshgridの座標生成規約(torch.meshgridのindexing)。- PadMode
- 非定数パディングのモード(
F.padのmode。定数埋めは既存Var::pad)。 - Quantile
Interpolation quantileの補間方式(torch.quantileのinterpolation相当)。- RngError
randint専用のエラー型。shape起因の不整合(要素数オーバー フロー等)はTensor::zeros等と同じShapeErrorへ委譲し (From<ShapeError>実装)、low >= highという範囲自体の不正はShapeErrorの対象外(shape 不整合限定。crates/tensor-core/src/error.rsのShapeErrorvariant 一覧参照)であるため本型で新設する (イシュー #1725)。bernoulli/multinomial/normal・Generator(イシュー #2156)も同じ型を再利用し、確率・重み・mean/stdの検証違反用に variant を追加する(下記)。- ScalarD
Type - 演算対象 dtype のタグ(イシュー #1687)。
- Scatter
Reduce Mode scatter_reduceの縮約種別(torch.scatter_reduceのreduce相当)。- Shape
Error - テンソル生成・view 操作・reshape の shape 不整合を表す。
- Stft
PadMode stftのcenter = true時の端パディング種別(pad_mode相当)。
Traits§
- Cast
Element - cast 対象になりうる dtype の capability 境界(イシュー #1750)。
- Custom
Function - ユーザー定義の forward/backward 対(
docs/autodiff-custom-function- decision.md§12.4)。crate::Tape::custom(tape.rs)経由で テープへ登録する唯一の実装口。 - Scalar
- 演算対象になりうる dtype の capability 境界(イシュー #1687)。
- Typed
Ops - dtype 別の演算本体(イシュー #1687)。
Functions§
- arange
[start, end)をstep刻みで並べたテンソルを生成する(PyTorchtorch.arange相当。イシュー #1726)。randn/rand/randintと同じくホスト側だけで完結しBackendOpsを経由しない (Op/VJP も追加しない。微分不能な葉値のため)。数値契約 (プラットフォーム横断で bit 同一)はfandhe_ai_tensor_core::creationモジュール doc 参照。- available_
devices - 実行時に利用可能な
Deviceを列挙する(docs/public-api-design.md§4.1Device::available()の集約入口。イシュー #1614。TASK-1.9a (#44。tensor-core::deviceモジュール doc)が「集約入口をどの層で 結線するかは後続イシューへ引き継ぐ」としていた未決事項をここで解消 する)。 - bernoulli
- 確率テンソル
probsの各要素を成功確率とするベルヌーイ試行を行い、 0.0/1.0 のf32テンソルを返す(PyTorchtorch.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_statsdoc コメント参照)。 - 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の単位行列を生成する(PyTorchtorch.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個の等間隔値で埋めたテンソルを 生成する(PyTorchtorch.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)。PODPoolStatsのみを返し、内部ハンドル 表現は含まない(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テンソルを返す(PyTorchtorch.multinomial相当。イシュー #2593)。設計・到達経路・乱数源はbernoulliと同じ。 - normal
- 平均
mean・標準偏差stdの正規分布に従う乱数テンソルを生成する (PyTorchtorch.normal(mean, std, size)のスカラー版相当。イシュー #2593)。設計・到達経路はbernoulliと同じ。 - ones_
like likeと同じ shape・全要素1.0の新規テンソルを生成する(PyTorchtorch.ones_like相当。イシュー #1726)。契約はzeros_likeと 同じ。- rand
[0, 1)の一様分布に従う乱数テンソルを生成する(PyTorchtorch.rand相当。イシュー #1725)。設計・到達経路はrandnと同じ。整数演算 のみで構成されるためプラットフォーム横断で bit 同一の決定性を持つ (fandhe_ai_tensor_core::rngモジュール doc 参照)。- randint
[low, high)の一様分布に従う整数乱数テンソルを生成する(PyTorchtorch.randint相当。イシュー #1725)。dtype はi32(本リポの index/targets 型契約に合わせた意図的な差異。docs/rng-global-contract-design.md)。low >= highはRngError::InvalidRangeを返す。- randn
- 標準正規分布
N(0, 1)に従う乱数テンソルを生成する(PyTorchtorch.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の新規テンソルを生成する(PyTorchtorch.zeros_like相当。イシュー #1726)。likeが転置・broadcast 由来の非 contiguous view であっても shape のみを引き継ぎ、strides は保存しない新規 contiguous バッファを返す (fandhe_ai_tensor_core::creationモジュール doc 参照)。
Type Aliases§
- Cuda
Graph Step Mode 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モジュール冒頭 コメント参照)。- Cuda
Graph Step Stats fandhe_ai_backend_cuda::graph::StepGraphStatsの再公開(同上。 launch 固定費の診断用スナップショット)。