MLism

AWS Marketplace版YomiToku-ProをAmazon SageMaker AIのBatch Transformで使う方法

Tech/

AWS Marketplace版YomiToku-ProをAmazon SageMaker AIのBatch Transformで実行し、S3上のPDFを一括解析してMarkdownなどへ変換するまでの手順を解説します。

AWS MarketplaceAmazon SageMaker AIBatch TransformOCRYomiToku-Pro

MLism代表の木之下です。OCRのユースケースでは、文書検索用に大量の文書を一括解析したり、日中に収集した文書を深夜バッチで定期的に処理したりするケースがあります。こうした用途に適しているのが、Amazon SageMaker AIのBatch Transformです。

Batch Transformでは、Amazon S3に保存した文書をジョブ単位で一括処理できます。Batch Transform自体にスケジュール機能やS3イベント連携機能はありませんが、EventBridge SchedulerやAmazon S3のイベント通知などと組み合わせることで、定期実行やファイルのアップロードを契機としたジョブ作成を自動化できます。また、ジョブの開始時に推論用インスタンスが起動し、完了後に終了するため、常時稼働するエンドポイントと比べて、処理頻度の低い用途ではコストを抑えやすいという特長があります。

本記事では、AWS Marketplaceで提供しているYomiToku-Proの軽量版をサブスクライブし、Amazon SageMaker AIのBatch TransformでPDFを解析する手順を紹介します。最後に、出力されたJSONをYomiToku-ClientでMarkdown、CSV、HTMLへ変換します。

AWS Marketplaceとは

AWS Marketplaceは、AWS上で提供されるサードパーティ製品を検索・購入できるサービスです。製品をサブスクライブすると、自分のAWSアカウントで利用でき、料金もAWSの請求に集約できます。YomiToku-Proは、Amazon SageMaker AI向けのモデルパッケージとして提供しています。

YomiToku-Pro - Document Analyzer Liteとは

YomiToku-Pro Document Analyzerは、日本語OCRと文書レイアウト解析をAmazon SageMaker AI上で利用できる製品です。サブスクライブすると、YomiTokuのWeb APIを内包したコンテナをAmazon SageMaker AIのモデルとして実行できます。入力文書と解析結果は、お客様が管理するS3バケットに保存されます。

販売者がDockerコンテナイメージを含むモデルパッケージをAWS Marketplaceへ出品し、利用者がサブスクライブした後、Amazon SageMaker AIのモデルをリアルタイム推論またはBatch Transformとして実行する流れ
AWS Marketplace版YomiToku-ProをAmazon SageMaker AIで利用する流れ

Amazon SageMaker AIにおける推論方式

Amazon SageMaker AIには、代表的な推論方式としてリアルタイム推論、非同期推論、Batch Transformがあります。それぞれの一般的な違いは次のとおりです。

推論方式実行方法計算リソース適した用途
リアルタイム推論デプロイしたエンドポイントをAPIとして呼び出すエンドポイントとして継続稼働Webサービスや業務アプリから即時に解析する
非同期推論(本製品では利用不可)S3上の入力データを非同期エンドポイントへ連携するエンドポイントとして稼働。構成によりゼロ台までスケール可能大きな入力や処理時間の長いリクエストを処理する
Batch TransformS3上の複数ファイルをジョブ単位で処理するジョブ開始時に起動し、完了後に終了夜間バッチ、定期処理、大量文書を一括解析する

AWS Marketplaceのモデルは非同期推論をサポートしていないため、AWS Marketplace版YomiToku-Proではリアルタイム推論またはBatch Transformを利用します。Batch Transformはジョブ作成後にインスタンスが起動するため、即時応答ではなく一括処理に適しています。

Batch Transformを選ぶメリット

Batch Transformは、処理対象があらかじめS3へ集約されており、即時応答を必要としない業務に向いています。例えば、次のような用途です。

  • 日中に受け付けた文書を、深夜バッチでまとめて解析する
  • 過去のPDFを一括でOCRし、全文検索やRAGに投入するデータを作成する
  • S3へ追加された帳票を、日次または週次で処理する

ジョブが終了すると推論用インスタンスも終了します。常時稼働するリアルタイムエンドポイントと比べて、処理頻度が低い用途では費用を抑えやすくなります。

今回作成する構成

今回は東京リージョン(ap-northeast-1)で、YomiToku-Proの軽量版をml.g4dn.xlargeインスタンス1台で実行します。

項目設定値
Amazon SageMaker AIのモデル名yomitoku-pro-document-analyzer-lite
Batch Transformジョブ名yomitoku-pro-document-analyzer-lite-batch-0000
入力先s3://yomitoku-batch/input/
出力先s3://yomitoku-batch/output/
入力形式PDF(application/pdf
インスタンスタイプml.g4dn.xlarge
インスタンス数1

実際に利用するときは、S3バケット名、モデル名、ジョブ名を自身の環境に合わせて変更してください。

コストの目安

本記事で使用するml.g4dn.xlarge1台は、2026年8月時点の試算で合計1,759円/時です。内訳はAmazon SageMaker AIのインスタンス料金159円/時と、AWS Marketplaceのソフトウェア利用料10米ドル/時(1米ドル160円換算)です。

稼働時間概算費用
10分約293円
30分約880円
1時間約1,759円

時間料金は分単位で按分されます。軽量版の性能検証記事では、約0.60円/ページと試算しました。ただし、実際の費用はジョブの起動時間、文書の内容、処理量によって変わります。S3などの料金は含んでいません。最新の価格は、AWS Marketplace製品ページAmazon SageMaker AI料金ページで確認してください。

事前に用意するもの

次のリソースまたは実行環境を用意します。

  • AWS MarketplaceでYomiToku-Pro - Document Analyzer LiteをサブスクライブしたAWSアカウント
  • 入出力に使用するS3バケット
  • S3へのアクセス権限を持つAmazon SageMaker AIの実行ロール
  • AWS CLIを使用する場合は、認証情報とリージョンの設定
  • Python 3.10〜3.12を利用できる環境
  • YomiToku-Client(パッケージ名:yomitoku-client

Batch TransformがS3へアクセスするときに使うのは、AWSコンソールへサインインしているAdminロールではなく、Amazon SageMaker AIのモデル作成時に選択したIAMロールです。コンソールやAWS CLIからS3ファイルを開けても、モデルの実行ロールに権限がなければジョブは403 Forbiddenで失敗します。

1. AWS Marketplaceでサブスクライブする

AWS Marketplaceで利用する製品を開き、料金と利用条件を確認してサブスクライブします。YomiToku-Proの通常版と軽量版は別のAWS Marketplace製品です。軽量版を利用する場合は、必ず軽量版の製品をサブスクライブしてください。

製品ページで「Continue to Subscribe」を選択し、続いて「Continue to Configuration」へ進みます。Software Versionは原則として最新版、RegionはBatch Transformジョブを実行するリージョンを選択します。本記事ではap-northeast-1を使用します。

2. Amazon SageMaker AIのモデルを作成する

Amazon SageMaker AIコンソールを開き、左側のメニューから Deployments & inference > Deployable modelsへ進み、モデルの作成画面を開きます。

Amazon SageMaker AIコンソールのダッシュボード。左側にDeployments & inferenceとAWS Marketplace resourcesのメニューが表示されている
Amazon SageMaker AIコンソールからモデルの作成画面へ進む

モデル名へyomitoku-pro-document-analyzer-liteを入力し、Amazon SageMaker AIのIAMロールを選択します。

Amazon SageMaker AIのモデル作成画面。モデル名にyomitoku-pro-document-analyzer-liteが入力され、IAMロールが選択されている
モデル名と、Batch Transformで使用するIAMロールを設定する

モデル作成時のIAMロールに注意する

ここで選択するIAMロールは、モデルを登録するためだけのものではありません。Batch Transformジョブが入力ファイルをS3から読み取り、結果をS3へ保存するときにも、このロールが使われます。

次は、既存のAmazon SageMaker AIの実行ロールへ追加する、Batch TransformのS3入出力に必要なIAMポリシー例です。YOUR_BUCKETは利用するバケット名に置き換えてください。入力と出力のプレフィックスを分け、必要な範囲だけを許可しています。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ListBatchBucket",
      "Effect": "Allow",
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::YOUR_BUCKET",
      "Condition": {
        "StringLike": {
          "s3:prefix": ["input/*", "output/*"]
        }
      }
    },
    {
      "Sid": "ReadBatchInput",
      "Effect": "Allow",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::YOUR_BUCKET/input/*"
    },
    {
      "Sid": "WriteBatchOutput",
      "Effect": "Allow",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::YOUR_BUCKET/output/*"
    }
  ]
}

作成済みモデルの実行ロールは、Amazon SageMaker AIコンソールの Deployments & inference > Deployable models > 対象モデルに表示されるExecution role ARNで確認できます。AWS CLIでは次のように確認できます。

aws sagemaker describe-model \
  --model-name yomitoku-pro-document-analyzer-lite \
  --query ExecutionRoleArn \
  --output text \
  --region ap-northeast-1

コンテナ入力オプションでは「AWS Marketplaceからのモデルパッケージサブスクリプションを使用する」を選択します。モデルパッケージサブスクリプションの一覧から「YomiToku-Pro - Document Analyzer Lite」を選びます。

Amazon SageMaker AIのモデルのコンテナ定義画面。AWS Marketplaceからのモデルパッケージサブスクリプションを使用する設定でYomiToku-Pro Document Analyzer Liteが選択されている
軽量版のモデルパッケージサブスクリプションを選択する

必要に応じてVPCやタグを設定し、モデルを作成します。Batch Transformでは、リアルタイムエンドポイントを作成する必要はありません。

3. 入力文書をS3へアップロードする

解析するPDFをs3://yomitoku-batch/input/へ配置します。AWS CLIからまとめてアップロードする場合は、次のように実行します。

aws s3 cp ./input/ s3://yomitoku-batch/input/ \
  --recursive \
  --exclude "*" \
  --include "*.pdf"

本記事ではPDFを扱うため、Batch TransformのContent-Typeにはapplication/pdfを指定します。入力プレフィックスには処理対象のPDFだけを置き、出力先は入力プレフィックスの外に設定してください。

4. Batch Transformジョブを作成する

Amazon SageMaker AIコンソールの左側のメニューから、Deployments & inference > バッチ変換ジョブを開き、「バッチ変換ジョブの作成」を選択します。

Amazon SageMaker AIコンソールのDeployments & inference配下にあるバッチ変換ジョブメニュー
Deployments & inferenceからバッチ変換ジョブを開く

ジョブの基本情報を次のように設定します。

項目設定値
ジョブ名yomitoku-pro-document-analyzer-lite-batch-0000
モデル名yomitoku-pro-document-analyzer-lite
インスタンスタイプml.g4dn.xlarge
インスタンス数1
最大同時変換数1
最大ペイロードサイズ100 MB
暗号化キーカスタム暗号化なし

このジョブ名は初回実行の例です。Batch Transformのジョブ名はAWSアカウントとリージョンの中で一意である必要があるため、再実行するときは別の名前へ変更してください。

Batch Transformジョブの作成画面。ジョブ名、YomiToku-Pro軽量版のモデル名、ml.g4dn.xlarge、インスタンス数1が設定されている
Batch Transformジョブの基本設定

入力データと出力データは次のように設定します。

区分項目設定値
入力S3データタイプS3Prefix
入力S3の場所s3://yomitoku-batch/input/
入力Content-Typeapplication/pdf
入力圧縮None
入力分割タイプNone
出力S3出力パスs3://yomitoku-batch/output/
出力組み合わせNone

SplitTypeにはNoneを指定します。Lineを選択するとPDFや画像のバイナリが行単位で分割されるため、YomiToku-Proの入力として利用できません。

SplitType=Noneでは、1つのPDF全体が1回の推論リクエストとして処理されます。そのため、1つの大きなPDFを複数のインスタンスへ分散して処理することはできません。インスタンスを複数台にした場合に並列化されるのは、主に複数ファイルを投入したときです。1ファイルのサイズや処理時間が大きすぎる場合は、PDFを事前に分割してください。詳しくは、Batch Transformによる推論のAWS公式ドキュメントを参照してください。

Batch Transformの入出力設定画面。入力にS3Prefix、application/pdf、s3://yomitoku-batch/input/、出力にs3://yomitoku-batch/output/が設定されている
S3の入力プレフィックス、Content-Type、出力プレフィックスを設定する

設定内容を確認してジョブを作成します。作成直後のステータスはInProgressとなり、処理が完了するとCompletedへ変わります。

yomitoku-pro-document-analyzer-lite-batch-0000が正常に作成され、InProgressとなったBatch Transformジョブ一覧
ジョブが作成され、文書の解析が開始される

AWS CLIから作成する場合

同じジョブをAWS CLIから作成する場合は、次のコマンドを実行します。--transform-job-nameは実行ごとに変更してください。

aws sagemaker create-transform-job \
  --transform-job-name yomitoku-pro-document-analyzer-lite-batch-0000 \
  --model-name yomitoku-pro-document-analyzer-lite \
  --transform-input 'DataSource={S3DataSource={S3DataType=S3Prefix,S3Uri=s3://yomitoku-batch/input/}},ContentType=application/pdf,CompressionType=None,SplitType=None' \
  --transform-output 'S3OutputPath=s3://yomitoku-batch/output/,Accept=application/json,AssembleWith=None' \
  --transform-resources 'InstanceType=ml.g4dn.xlarge,InstanceCount=1' \
  --max-concurrent-transforms 1 \
  --max-payload-in-mb 100 \
  --region ap-northeast-1

ジョブの状態は次のコマンドで確認できます。

aws sagemaker describe-transform-job \
  --transform-job-name yomitoku-pro-document-analyzer-lite-batch-0000 \
  --query '{Status:TransformJobStatus,FailureReason:FailureReason}' \
  --region ap-northeast-1

TransformJobStatusCompletedになれば処理完了です。Failedの場合は、FailureReasonとCloudWatch Logsの/aws/sagemaker/TransformJobsを確認してください。

MaxPayloadInMBの既定値は6 MBです。6 MBを超えるPDFも処理できるよう、本記事では最大値の100 MBを指定しています。

5. 解析結果をダウンロードする

ジョブが完了すると、指定したS3出力先へYomiToku-Proの解析結果がJSON形式で保存されます。入力が次のオブジェクトの場合、

s3://yomitoku-batch/input/20260217.pdf

出力ファイルには、元のファイル名に.outが付加されます。

s3://yomitoku-batch/output/20260217.pdf.out

出力先を確認し、ローカルへダウンロードします。

aws s3 ls s3://yomitoku-batch/output/ --recursive
aws s3 cp s3://yomitoku-batch/output/20260217.pdf.out ./20260217.pdf.out

6. YomiToku-ClientでMarkdownへ変換する

Batch Transformの.outファイルは、YomiToku-Proの解析結果を格納したJSONです。YomiToku-Clientを使うと、再推論せずにMarkdown、CSV、HTMLへ変換できます。

まず、yomitoku-clientパッケージをインストールします。

pip install yomitoku-client

Markdown、CSV、HTMLをまとめて出力します。

yomitoku-client convert 20260217.pdf.out \
  --format md,csv,html \
  --output-dir ./converted

出力先には次のファイルが作成されます。

converted/
├── 20260217.md
├── 20260217.csv
└── 20260217.html

ここでは動作確認のためローカルで実行していますが、実運用ではAWS LambdaなどでYomiToku-Clientを動かし、S3へ出力されたJSONをMarkdownやCSVへ変換する構成を想定しています。この変換では推論を再実行しないため、追加の推論料金は発生しません。

定期バッチとして運用する

ここまでの手順を自動化する場合は、Amazon EventBridge SchedulerからAWS Step Functionsのステートマシンを定期実行し、Step FunctionsからBatch Transformジョブを作成する構成を推奨します。

業務システム
    │ 日中にPDFをアップロード
    ▼
入力用S3プレフィックス
    │
    │ 指定時刻に起動
    ▼
EventBridge Scheduler
    │ StartExecution
    ▼
Step Functions
    │ Amazon SageMaker AI CreateTransformJob(.sync)
    ▼
Amazon SageMaker AI Batch Transform
    │ ジョブ完了後にJSONを保存
    ▼
出力用S3プレフィックス
    │
    ▼
AWS Lambda(YomiToku-Client)
    │ Markdown・CSVへ変換
    ▼
文書検索、データベース、RAGへ連携

同じS3プレフィックスを繰り返し指定すると、処理済みのファイルも再処理されます。日付別のプレフィックスなどで処理対象を分け、ジョブ名にも日時やUUIDを含めて実行ごとに一意にしてください。

おわりに

AWS Marketplace版YomiToku-ProとBatch Transformを組み合わせることで、夜間バッチや過去文書の一括OCRなど、即時応答を必要としない処理を効率よく実行できます。

さらに、S3へ保存された解析結果を契機にAWS Lambdaを起動し、YomiToku-ClientでMarkdownやCSVへ変換することで、文書検索やRAGへつながる一連の処理をAWS上で自動化できます。