はじめに
IBM Cloudでは2025年10月からCode Engineの新機能として、サーバーレスにジョブを実行できるCode Engine Fleetsの機能が追加されました。
Fleetsは大規模な計算集約型のワークロードを得意としており、使った分だけ課金が発生するCodeEngineのメリットを取りながら、計算の並列実行やGPU搭載ノードでの実行などのFleetsならではのタスクが実施できます。
本稿では基本的なFleetsの特徴紹介から、簡単なチュートリアルシナリオの実施手順を記載します。
実施するシナリオはこちらのGithub上にあるチュートリアルシナリオを参考にしています。
Code Engine Fleetsとは
Code Engine FleetsはCode Engineに新たに追加された大規模ワークロード向けのサーバーレス実行環境となります。
Fleetsでは実行するワークロードをタスクとして用意し、そのタスクを実行するためのリソースとしてワーカーノードがVPC環境にデプロイされます。
Fleetsの使用する上で嬉しい特徴として以下のものが挙げられます。
1. ワーカーノードの自動スケーリング
Fleetsでは設定されたタスクに応じてリソース要件を最も効率的に満たすよう自動的なスケーリングがされます。
例えば2vCPU, 8GBを使用するタスクを100個用意し、同時実行タスク数を100、実行するワーカープロファイルを4x16に指定した場合、条件を満たすため、200vCPU, 800GBのリソースが自動的に用意されます。
つまり、指定したワーカープロファイル(4vCPU, 16GB)のプロファイルを持つワーカーノードが自動的に50node分デプロイされます。
2. GPUワーカーノードのデプロイ
Fleetsでは実行するプロファイルとしてGPUを指定することでタスクをGPUノードで実行することができます。そのため、AIワークロードを含めた大規模なタスクに対してGPUを完全従量課金としてタスク実行中のリソース課金のみで実行することが可能です。
注意
ポータルのUIではGPUノードはまだ対応していません。作成する場合はCLIから作成してください。
また、自動スケーリングの機能はCPUノード未対応となっています。
3. 既存のVPC環境で利用可能
Fleetsは既存で利用しているVPC環境内にタスク実行のためのワーカーを配置できます。
Fleets実行の際、あらかじめVPCで使用するサブネットとセキュリティグループを指定することで指定したサブネットないにワーカーノードが配置されます。
Fleetsのチュートリアルシナリオ実行手順
今回はGithubの公式チュートリアルのうちの一つのDoclingのデモを実施するための手順を記載します。
Doclingとはドキュメントの変換と解析に特化したオープンソースパッケージとなっており、本シナリオではPDFのデータをMarkdown形式のファイルに変換するタスクを実行します。
本シナリオの手順と構成は以下のとおりです。
- ソースデータの準備
- 実行タスクの設定
- Fleetsによるタスクの実行
- 変換データの確認
本シナリオ実施にあたり、以下の環境はすでに作成されているものとします。
- Fleets実行用のVPC
- サブネット
- セキュリティグループ
- データ保管用のICOS
- 入力データ用バケット(fleet-input-store)
- タスク実行用バケット(fleet-task-store)
- 出力データ用バケット(fleet-output-store)
- HMAC資格情報
- Fleets用のCode Engine
- Code Engineプロジェクト
注意
VPCのセキュリティグループではインバウンドルールとして443portを許可する必要があります
また、Github上のデータも使用するため、あらかじめ作業環境へGithubをクローンしておいてください。
git clone https://github.com/IBM/CodeEngine.git
0. 事前準備
チュートリアル実施前にFleetsを実行するためには以下の2つを設定する必要があります。
- 永続データストアの作成
- サブネット、セキュリティグループ用のシークレット作成
1. 永続データストアの作成
Code Engineの機能で永続データストアとしてICOSを登録することでCode Engineから永続データストアとしてICOSを利用できます。
こちらのdocsの手順に従ってデータ保管用のICOSバケット3つを永続データストアとして登録していください。
2. サブネット、セキュリティグループ用のシークレット作成
Fleetsのワーカーノードを稼働させる環境を指定するためにサブネット、セキュリティグループの情報をシークレットに保存する必要があります。
CloudポータルのCode Engineプロジェクト画面からシークレットおよびconfigmap->作成->一般シークレットを選び、新規シークレットを作成します。
シークレット作成時、シークレット名は必ずcodeengine-fleet-defaultsとしてください。
シークレットのキーバリューの組み合わせとしてpool_subnet_crn_1: $SUBNET_CRN、pool_security_group_crns_1: $SG_CRNを入力します。
$SUBNET_CRNと$SG_CRNはそれぞれサブネットのCRN、セキュリティグループのCRNを確認し、代入してください。
$ ##サブネットCRNの確認
$ ibmcloud is subnet <subnet_id>
$ ##セキュリティグループCRNの確認
$ ibmcloud is sg <securitygroup_id>
Fleetsのワーカーノードはcodeengine-fleet-defaultsの情報を元にVPC上で作成されます。
1. ソースデータの準備
ここからチュートリアルシナリオの準備に入ります。
まずはじめに変換元となるデータを入力データ用のICOSバケットへ用意します。
ソースデータはgithubからクローンしたフォルダのうちCodeEngine/serverless-fleets/data/input/docling/pdfsにありますので、これらのデータをICOSへアップロードします。
2. 実行タスクの設定
次にFleetsで実行するタスクの設定を行います。
今回はGithub上にある既存のタスクファイルを使用します。(serverless-fleets/tutorials/docling/commands.jsonl)
{ "cmds":["docling"], "args": ["--num-threads", "12", "/input/pdfs/2203.01017v2.pdf", "--output", "/output/docling_2203.01017v2.pdf.md" ]}
{ "cmds":["docling"], "args": ["--num-threads", "12", "/input/pdfs/2206.01062.pdf", "--output", "/output/docling_2206.01062.pdf.md" ]}
{ "cmds":["docling"], "args": ["--num-threads", "12", "/input/pdfs/2305.03393v1-pg9.pdf", "--output", "/output/docling_2305.03393v1-pg9.pdf.md" ]}
{ "cmds":["docling"], "args": ["--num-threads", "12", "/input/pdfs/2305.03393v1.pdf", "--output", "/output/docling_2305.03393v1.pdf.md" ]}
{ "cmds":["docling"], "args": ["--num-threads", "12", "/input/pdfs/amt_handbook_sample.pdf", "--output", "/output/docling_amt_handbook_sample.pdf.md" ]}
{ "cmds":["docling"], "args": ["--num-threads", "12", "/input/pdfs/code_and_formula.pdf", "--output", "/output/docling_code_and_formula.pdf.md" ]}
{ "cmds":["docling"], "args": ["--num-threads", "12", "/input/pdfs/picture_classification.pdf", "--output", "/output/docling_picture_classification.pdf.md" ]}
{ "cmds":["docling"], "args": ["--num-threads", "12", "/input/pdfs/redp5110_sampled.pdf", "--output", "/output/docling_redp5110_sampled.pdf.md" ]}
{ "cmds":["docling"], "args": ["--num-threads", "12", "/input/pdfs/right_to_left_01.pdf", "--output", "/output/docling_right_to_left_01.pdf.md" ]}
{ "cmds":["docling"], "args": ["--num-threads", "12", "/input/pdfs/right_to_left_02.pdf", "--output", "/output/docling_right_to_left_02.pdf.md" ]}
{ "cmds":["docling"], "args": ["--num-threads", "12", "/input/pdfs/right_to_left_03.pdf", "--output", "/output/docling_right_to_left_03.pdf.md" ]}
このタスクファイルでは11個のタスクが設定されており、ICOS上に保管されているpdfを変換して出力用のICOSへ保存するタスクが記載されています。
3. Fleetsによるタスクの実行
いよいよ実際にFleetsを動かし、タスクを実行します。
Fleetsの作成はポータル/CLIともに可能ですが、一部CLIのみ可能なオプションがあるため、今回はCLI上で実施します。
Githubにあるrunファイル(serverless-fleets/tutorials/docling/run)を実行もしくは以下のコマンドをタスクファイルがあるディレクトリで実行します。
$ ibmcloud code-engine fleet create --name "fleet-docling" \
--image "quay.io/docling-project/docling-serve-cpu" \
--worker-profile mx3d-24x240 \
--max-scale 8 \
--tasks-from-local-file commands.jsonl \
--cpu 12 \
--memory 120G \
--tasks-state-store fleet-task-store \
--mount-data-store /input=fleet-input-store:/docling \
--mount-data-store /output=fleet-output-store:/docling
Successfully created fleet with name 'fleet-docling' and ID 'XXX'
Run 'ibmcloud ce fleet get --id XXX' to check the fleet status.
Run 'ibmcloud ce fleet worker list --fleet-id XXX' to retrieve a list of provisioned workers.
Run 'ibmcloud ce fleet task list --fleet-id XXX' to retrieve a list of tasks.
OK
コマンドを実行後、ポータルのFleets画面で実行状況を確認することができます。
プロジェクトメニューからFleets->fleet-doclingを選択するとコマンドで作成したfleetの画面が表示できます。
Tasksの画面では現在のタスクの実行状況が確認できます。水色のRunningでは現在実行中のタスクが表示されています。
Task listにはより詳細にどのタスクが実行されているかが表示されます。
一つ右のWorkersタブでは稼働しているワーカーノードが確認できます。
ワーカーノードを確認すると、指定したサブネット上で作成されていることが確認できるかと思います。
また、今回は1つのタスクで使用するリソースを12x120、プロファイルを24x240、同時実行タスク数を8つで設定しているので、自動的に24x240のワーカーノードが4ノードに増強されていることが確認できます。
これらのノードは実行中のタスクが終わり次第、次のタスクが実行され、待機中のタスクも無くなった場合は使用していないノードが自動的に削除されます。
4. 変換データの確認
最後にfleets実行後、正しくタスクが実行できているかを確認するために出力データを保管しているICOSバケットを確認します。
今回CLIで出力データをfleet-output-store:/doclingと指定しているため、バケット内のdoclingフォルダを確認すると変換されたデータが確認できます。
まとめ
本稿ではFleetsの特徴とチュートリアルシナリオの実施方法について記載しました。
FleetsはGPUのような用意しづらい環境も秒単位の従量課金となるため、気軽に利用することができます。
チュートリアルシナリオには他にもLLMを実装して推論を行うものや株価を予想するものなど様々ありますので、皆さんもぜひGithubを確認し、Fleetsを触ってみてください。





