FBQueue: 技術概要
FBQueue (Forblaze Queue) は、共有計算環境における研究者や開発者のために設計された、堅牢で軽量なローカルジョブスケジューラです。
このドキュメントでは、FBQueue のアーキテクチャ、リソース管理、高度なスケジューリング機能、および PBS や Slurm といった伝統的な HPC スケジューラとの互換性について詳しく説明します。
0. インストール方法
FBQueueは単一のバイナリとして配布されており、以下の手順で導入できます。
1. ダウンロードと展開
ご利用の環境(x86_64 または Arm64)に合わせて選択してください。
Linux (x86_64):
wget https://github.com/ForblazeProject/fbqueue/releases/download/v0.9.3/fbqueue-linux-x64.tar.gz
tar -xzvf fbqueue-linux-x64.tar.gz
Linux (Arm64/AArch64):
wget https://github.com/ForblazeProject/fbqueue/releases/download/v0.9.3/fbqueue-linux-arm64.tar.gz
tar -xzvf fbqueue-linux-arm64.tar.gz
2. バイナリの配置
パスの通ったディレクトリ(例:~/bin)にバイナリを移動します。
mkdir -p ~/bin
mv fbqueue ~/bin/
3. (任意) PBSスタイルのシンボリックリンク作成
qsub や qstat といった馴染みのあるコマンド名を使用したい場合は、以下のようにリンクを作成してください。
ln -s ~/bin/fbqueue ~/bin/qsub
ln -s ~/bin/fbqueue ~/bin/qstat
ln -s ~/bin/fbqueue ~/bin/qdel
1. 導入と設計思想
FBQueue は、手動でのスクリプト実行と、重厚なエンタープライズ向けスケジューラの間のギャップを埋めるために開発されました。以下の主要な原則に基づいて設計されています。
- 依存関係ゼロ: 最高のポータビリティとセキュリティを確保するため、Rust 標準ライブラリのみで構築されています。
- シングルバイナリ: Linux (x86_64, AArch64) および Windows をサポートしています。
- オンデマンド実行 (管理不要): デーモンは任意の CLI コマンド (
sub,stat,del) によって自動的に起動され、一定期間の非アクティブ状態が続くと終了します。 - 高い可搬性: ラズベリーパイ、クラウドの Arm インスタンス(AWS Graviton 等)、Jetson などのエッジデバイスでも動作します。
- 透明性: すべてのジョブの状態はファイルシステムを通じて直接確認・管理可能です。複雑なデータベースクエリを必要とせず、容易な検査とデバッグが可能です。
- 堅牢性: デーモンの再起動やシステムの再起動後、中断されたジョブの自動リカバリ機能を備えています。
2. セキュリティと効率性
FBQueue は、ソフトウェアのインストールやネットワークアクセスが制限された高セキュリティ環境向けに構築されています。
- ネットワークポート不使用: FBQueue はファイルシステムを介してのみ動作します。ネットワークポートを一切露出させないため、企業や大学の研究環境に最適です。
- データベースエンジン不要: 透明性の高いファイルベースの状態管理システムを採用しています。データベースのセットアップやメンテナンスは不要です。
- デーモンの自動シャットダウン: 非アクティブな期間(
inactivity_timeout, デフォルト: 300秒)が続くと、デーモンは自動的に終了します。実行中および待機中のジョブがすべて空である場合にのみ終了するため、スケジュールされたタスクを逃すことはありません。
3. リソース管理 (Capacity & Cost)
FBQueue は、capacity(容量)と cost(コスト)という抽象的な値を通じて計算リソースを管理します。
capacity: 環境全体の合計リソース割り当て制限(例:CPUコア数やGPUユニット数)であり、configファイルで定義されます。cost: 各ジョブのリソース消費量(「重み」)であり、ジョブ投入時に指定されます。- スケジューリング論理:
現在使用中のcost合計 + ジョブのcostがcapacity以下である場合にのみ、ジョブが開始されます。
4. マルチキューと優先度のサポート
~/.fbqueue/config でキューを定義することで、リソースの分配と実行順序を制御できます。
# 設定例
capacity: 16 # グローバルな最大容量
default_queue: batch
queue: batch
capacity: 8 # このキューの最大容量
priority: 10 # 低い優先度
queue: express
capacity: 4 # このキューの最大容量
priority: 100 # 高い優先度(先に処理される)
5. 高度なスケジューリング機能
Walltime (-W)
指定された実行時間制限を超えたジョブを自動的に終了させ、暴走したプロセスがリソースを消費し続けるのを防ぎます。
fbqueue sub -W 01:30:00 ./simulation.sh
依存関係管理 (-hold_jid)
指定したジョブ ID が正常終了 (DONE) するまでジョブの実行を待機させます。これにより、複雑なタスクグラフ (DAG) の実行が可能になります。
fbqueue sub -hold_jid 123 ./post_process.sh
遅延開始 (-a)
特定の時間以降にジョブを開始するようにスケジュールします。相対時間 (+1h)、特定の時刻 (18:00)、または絶対的な日付をサポートしています。
fbqueue sub -a 18:00 ./nightly_task.sh
6. PBS/HPC 互換性
FBQueue は、PBS、SGE、Slurm といった既存の HPC スケジューラの慣習と高い互換性を維持しています。
ディレクティブの解析
FBQueue はスクリプト内に埋め込まれたディレクティブを自動的に認識します。既存のジョブスクリプトを修正なしで使用できます。
| 機能 | サポートされるディレクティブ |
|---|---|
| ジョブ名 | #PBS -N, #SBATCH -J |
| リソース/コスト | #$ -pe smp N, #SBATCH -c N, #PBS -l ncpus=N |
| ターゲットキュー | #PBS -q, #SBATCH -p |
| 標準出力/エラー | #PBS -o, #PBS -e |
| 依存関係 | #PBS -hold_jid |
| Walltime | #PBS -l h_rt=HH:MM:SS |
シンボリックリンクによるエイリアス
Linux では、シンボリックリンクを作成することで、慣れ親しんだコマンドを使用して FBQueue を操作できます。
ln -s fbqueue qsub(ジョブの投入)ln -s fbqueue qstat(PBS スタイルの表形式での状態表示)ln -s fbqueue qdel(ジョブの削除)
7. 設定と環境
チーム共同利用 (共有モード)
単一マシン上の複数のユーザでキューを共有するには、FBQUEUE_DIR 環境変数を ローカルの共有ディレクトリ に設定します。注:ファイルロックの遅延が発生するため、ネットワークマウントされたドライブ (NFS/SMB) での使用は推奨されません。
8. Windows サポート
FBQueue は Windows をネイティブサポートしており、インタプリタを自動的に選択します。
.bat,.cmd:cmd /c経由で実行されます。.ps1:powershell -ExecutionPolicy Bypass -File経由で実行されます。
ジョブは、元のスクリプトのファイル権限を変更することなく、それぞれのシェルを介して実行され、スクリプトの完全性が維持されます。
9. 外部リンク
- GitHub Repository: https://github.com/ForblazeProject/fbqueue
- Download: https://github.com/ForblazeProject/fbqueue/releases