![]() 本記事は 夏休みクラウド自由研究2026 8/21付の記事です。 |
こんにちは、ひるたんぬです。
私はあくびをしている人を視認した場合、9割くらいの確率であくびがうつります。
では、なぜあくびがうつるのでしょうか?
現時点で得られる研究をまとめると、あくびの役割は「天敵から身を守るため」、そしてあくびが伝染する理由は、「周囲へ危険性を知らせるため」という本能が残っているからかもしれません。
すなわち、太古の昔から哺乳類に脈々と受け継がれてきた、必然的な反射なのです。
引用:Yahoo! ニュース「人があくびをする理由 なぜ伝染するのか? 呼吸器内科医が解説」
他にも調べてみましたが、明確な理由・メカニズムというものは分かっていないようです。
また、あくびの行為を目撃する以外にも「あくび」という文字や音を見聞きしただけであくびが出てしまうこともあるようで…
この部分を書いていた私も何回かあくびをしていた気がします。皆様はいかがでしょうか?
さて、今回は「夏休みクラウド自由研究」ということで、気になっていたけど中々触れられていなかったことをやってみようと思います。
やってみたいこと
Amazon Bedrockでは、Anthoropic ClaudeやAmazon Noveなど多数のモデルが用意されており、それらの中から適切なモデルを選定し利用されることが多いかなと思います。
一方、特定のドメインに適応させたい場合などは、基盤モデルをチューニングすることがあります。
本記事ではこのようなケースを想定し、Amazon Bedrock Custom Model Import 機能を用いてカスタムされたモデルをインポートし、実際にBedrock上で動作するところまで検証したいと思います。
モデルのインポート要件
Bedrockにインポートするには、そのモデルが要件に沿っている必要があります。
要件の詳細の紹介は割愛いたします。AWSのドキュメントをご参照ください。
利用料金
インポートしたモデルについては「カスタムモデルユニット」という単位で課金金額が決定されます。
これはモデルアーキテクチャ、モデルパラメータ数、コンテキストの長さなど、さまざまな要因によって設定されます。
実際のカスタムモデルユニット数は、モデルインポート時に分かるため、それを元に料金の算出が可能です。
以下はバージニア北部リージョン及びオレゴンリージョンにてLlamaベースのモデルをインポートした場合の料金です。
| カスタムモデルユニットのバージョン | v1.0 |
| カスタムモデルユニットあたりの料金/分* | 0.05718 USD |
| カスタムモデルユニットあたりのストレージコスト/月 | 1.95 USD |
この料金体系より、カスタムモデルインポートはトークンベースの課金体系ではないことが分かります。カスタムモデルユニット数(≒ モデル規模)に応じたサーバ・ストレージが用意され、サーバについては従量課金というイメージですかね。
モデル選定
今回は日本語応答に特化したモデルを選定しようと思います。
国立情報学研究所 大規模言語モデル研究開発センター (LLM研究開発センター)が主宰するLLMに関するコミュニティである、「LLM-jp」が公開する日本語に関するLLMのリーダーボードを参考にモデルを選定してみます。
▼ 国立情報学研究所 大規模言語モデル研究開発センター (LLM研究開発センター)
▼ LLM-jp
リーダーボード
今回は「Open Japanese LLM Leaderboard V2」を参考にしました。このリーダーボードでは、14のカテゴリに渡る71種類以上のタスクでLLMの性能を評価しています。
本リーダーボードのカテゴリ及びタスクは、こちらにまとめられています。
例えば「QA(Question Answering – 質問応答)」というカテゴリでは、クイズを題材としたデータセット(JAQKET (AIO))や日本の文化や風習に関するデータセット(JamC-QA)などを用いて質問応答の性能を測定しています。
今回はこの中から、「CR – コモンセンス推論」というカテゴリの中のJCommonSenseQAで、最もスコアの高い「Llama-3.3-Swallow-70B-Instruct-v0.4」というモデルを使用します。
本モデルは東京科学大学と国立研究開発法人産業技術総合研究所によって開発されたLlama 3.3ベースのモデルです。
モデルの構築方法などにつきましては下記サイトをご参照ください。
なお、JCommonSenseQAはYahoo! JAPAN研究所が提供する「日本語言語理解ベンチマークJGLUE(Japanese General Language Understanding Evaluation)」の一部を指します。
SQuADとはまた別のタイプの質問応答のデータセットとしてCommonsenseQA[文献9]があります。CommonsenseQAは常識推論能力を評価するための5択の選択式問題です。JCommonsenseQAはCommonsenseQAの日本語版で、コアとなる選択肢を知識ベースであるConceptNetの日本語部分から抽出し、質問と誤り選択肢をクラウドソーシングで作成しました。
引用:Yahoo! JAPAN Tech Blog「日本語言語理解ベンチマークJGLUEの構築 〜 自然言語処理モデルの評価用データセットを公開しました」
このベンチマークの詳細は以下サイトをご参照ください。
対応確認
大前提として、利用するモデルのライセンスが問題ないかを確認します。
今回のモデルは「Llama 3.3」ライセンスを採用しており、今回の検証の範囲では問題ないことが分かりました。
次にBedrockへインポートできるかの確認です。こちらは手動で上記の「インポート要件」に沿って確認してもよいのですが、今回はKiroにお願いしてみました。その結果が下表です。
| チェック項目 | 要件 | モデルの状態 | 判定 |
|---|---|---|---|
| アーキテクチャ | サポート対象 | LlamaForCausalLM (model_type: “llama”) – Llama 3.3 | ✅ 問題なし |
| 重みサイズ | テキストモデルは200GB未満 | 約141GB (30ファイル) | ✅ 問題なし |
| 重み形式 | Safetensors形式 | .safetensors 30ファイル | ✅ 問題なし |
| コンテキスト長 | 128K未満 | max_position_embeddings: 131,072 (= 128K) | ⚠️ 影響軽微 |
| vocab_size | 標準的な範囲 | 128,256 (Llama 3.3標準) | ✅ 問題なし |
| config.json | 必須 | あり | ✅ 問題なし |
| tokenizer_config.json | 必須 | あり | ✅ 問題なし |
| tokenizer.json | 必須 | あり | ✅ 問題なし |
| tokenizer.model | 必須 | なし(Llama3系はtokenizer.jsonで動作) | ⚠️ 要確認 |
| トークナイザークラス | サポート対象 | PreTrainedTokenizerFast | ✅ 問題なし |
| auto_map | なし推奨 | なし | ✅ 問題なし |
| rope_scaling | 互換性 | null(独自拡張なし) | ✅ 問題なし |
| transformersバージョン | 4.51.3サポート | 4.47.1 | ⚠️ 影響軽微 |
モデルインポート
まずは上記で「⚠️ 要確認」となっている事項を見ていきます。
tokenizer.model
そもそも「トークナイザー」とは何か、というところから分からなかったので、調べてみます。
誤解を恐れずに一言で言い表すと「文章をトークンに分解するためのもの」ということのようです。
そして、この「トークナイザー」には「tokenizer.model」と「tokenizer.json」の2つの形式が主に存在するようでした。前者は、Googleによって開発された形式でコンパイルされたファイルであるためファイルサイズが比較的小さいことが特徴です。一方、後者はHugging Faceによって開発されたもので、JSON形式であるため編集可能であることが特徴です。
最近のモデルでは、編集可能である(≒ 高い透明性)から、tokenizer.jsonを使用することが多いようです。
これを見た私は、「同じようなものなのであれば、tokenizer.jsonがあるし、tokenizer.modelいらないんじゃない…?」などと勝手に想像しました。また、他の方の検証記事などを拝見する限り、そのままでもモデルインポートできそうであることを確認できた、というのも判断材料としてあります。
▼ 他の方がインポートされていたモデルの一例(tokenizer.model がない)



なので、まずはそのままモデルインポートを試してみようと思います。
モデルインポート実施
まずはHugging Faceからモデルを入手します。今回はローカル端末にモデルダウンロード→S3にコピーという手順を踏みます。
モデルダウンロード(通常の手順)
当該モデルのページから、「…」→「Clone repository」を選択します。
するとコマンドが出てきますので、それを参考にモデルを取得します。
なお、今回は以下のコマンドでした。
git clone https://huggingface.co/tokyotech-llm/Llama-3.3-Swallow-70B-Instruct-v0.4
# Make sure git-xet is installed (https://hf.co/docs/hub/git-xet)
brew install git-xet
git xet install
モデルダウンロード(今回の手順)
通常は上記コマンドでファイルが取得できますが、今回はgit cloneを実行して8時間経っても進展が見られなかったため、Hugging Faceから直接取得するようにアプローチを変えました。
まずは、関連するモジュールをインストールします。仮想環境などを使われている方は適宜読み替えてください。
pip install huggingface_hub hf_transfer
完了しましたら、Hugging Faceにログインし、トークンの認証を行います。
hf auth login
ブラウザを開き、認証コードを入れて認証すれば完了です。
Warning: You are sending unauthenticated requests to the HF Hub. Please set a HF_TOKEN to enable higher rate limits and faster downloads.
hf download tokyotech-llm/Llama-3.3-Swallow-70B-Instruct-v0.4 \ --local-dir /Users/user/llm/Llama-3.3-Swallow-70B-Instruct-v0.4 \ # 各自で適切なディレクトリを設定 --include "config.json" "generation_config.json" "tokenizer_config.json" "tokenizer.json" "model.safetensors.index.json" "model-*.safetensors"
モデルのS3への転送
ローカル端末でのダウンロードが完了したら、続いて格納先のS3バケットを作成します。
今回はバージニア北部リージョンでカスタムモデルインポートを実行するため、同リージョン内でバケットを作成するようにします。
aws s3api create-bucket --bucket bedrock-custom-model-bucket-us-east-1 --region us-east-1 # 各自で適切なバケット名を設定
これが完了したら、バケット内にオブジェクトを移行します。S3 Syncを使う場合は以下のコマンドで同期します。
aws s3 sync /Users/user/llm/Llama-3.3-Swallow-70B-Instruct-v0.4/ \ # 各自で適切なディレクトリを設定 s3://bedrock-custom-model-bucket-us-east-1/Llama-3.3-Swallow-70B-Instruct-v0.4/ \ # 各自で適切なバケット名や宛先を設定 --exclude "*cache*" \ --include "config.json" \ --include "generation_config.json" \ --include "tokenizer_config.json" \ --include "tokenizer.json" \ --include "model.safetensors.index.json" \ --include "model-*.safetensors" \ --region us-east-1
一方、世の中には「s5cmd」というマシンの資源をフル活用することでS3への転送を高速化するツールもあるようです。
途中からこちらを使用してアップロードをしてみました。
上記のS3 Syncコマンドとは異なり、引数としてリージョンの指定ができないのでご注意ください。
AWS_REGION=us-east-1 s5cmd sync \ --include "model-*.safetensors" \ --include "config.json" \ --include "generation_config.json" \ --include "tokenizer_config.json" \ --include "tokenizer.json" \ --include "model.safetensors.index.json" \ --exclude "*cache*" \ /Users/user/llm/Llama-3.3-Swallow-70B-Instruct-v0.4/ \ # 各自で適切なディレクトリを設定 s3://bedrock-custom-model-bucket-us-east-1/Llama-3.3-Swallow-70B-Instruct-v0.4/ # 各自で適切なバケット名や宛先を設定
同期が完了したら、念のため中身を確認します。
aws s3 ls s3://bedrock-custom-model-bucket-us-east-1/Llama-3.3-Swallow-70B-Instruct-v0.4/ # 各自で適切なバケット名や宛先を設定 2026-08-11 18:34:57 763 config.json 2026-08-11 18:34:57 172 generation_config.json 2026-08-11 18:34:57 4584408808 model-00001-of-00030.safetensors 2026-08-11 18:34:57 4664167376 model-00002-of-00030.safetensors 2026-08-11 18:34:57 4999711704 model-00003-of-00030.safetensors 2026-08-11 18:34:57 4966157032 model-00004-of-00030.safetensors 2026-08-11 18:34:57 4664134408 model-00005-of-00030.safetensors 2026-08-11 18:59:13 4664167408 model-00006-of-00030.safetensors 2026-08-11 18:59:43 4664167408 model-00007-of-00030.safetensors 2026-08-12 19:11:27 4999711728 model-00008-of-00030.safetensors 2026-08-12 19:13:39 4966157056 model-00009-of-00030.safetensors 2026-08-12 19:13:39 4664134408 model-00010-of-00030.safetensors 2026-08-12 19:13:38 4664167408 model-00011-of-00030.safetensors 2026-08-12 19:13:39 4664167408 model-00012-of-00030.safetensors 2026-08-12 19:13:39 4999711728 model-00013-of-00030.safetensors 2026-08-12 19:26:07 4966157056 model-00014-of-00030.safetensors 2026-08-12 19:37:43 4664134408 model-00015-of-00030.safetensors 2026-08-12 20:02:54 4664167408 model-00016-of-00030.safetensors 2026-08-12 20:03:01 4664167408 model-00017-of-00030.safetensors 2026-08-12 20:05:21 4999711728 model-00018-of-00030.safetensors 2026-08-12 20:05:47 4966157056 model-00019-of-00030.safetensors 2026-08-12 20:14:15 4664134408 model-00020-of-00030.safetensors 2026-08-12 20:39:28 4664167408 model-00021-of-00030.safetensors 2026-08-12 20:39:43 4664167408 model-00022-of-00030.safetensors 2026-08-12 20:44:40 4999711728 model-00023-of-00030.safetensors 2026-08-12 20:44:52 4966157056 model-00024-of-00030.safetensors 2026-08-12 20:51:03 4664134408 model-00025-of-00030.safetensors 2026-08-12 21:16:48 4664167408 model-00026-of-00030.safetensors 2026-08-12 21:17:04 4664167408 model-00027-of-00030.safetensors 2026-08-12 21:24:42 4999711728 model-00028-of-00030.safetensors 2026-08-12 21:24:47 4966173536 model-00029-of-00030.safetensors 2026-08-12 19:05:00 2101346432 model-00030-of-00030.safetensors 2026-08-12 19:02:07 59615 model.safetensors.index.json 2026-08-12 19:28:20 17209958 tokenizer.json 2026-08-12 19:02:07 51048 tokenizer_config.json
指定したファイルがすべてS3に転送されていることを確認できました。
モデルインポートの実行
問題がなければモデルインポートを実行します。
Bedrockの「インポートしたモデル」より「インポートモデル」を押下します。
インポートモデル設定では、主にモデル名とインポート元のS3バケットを設定します。
設定が完了したら「インポートモデル」を押下します。
しばらくするとIAMロールが作成され、その後にインポートジョブが開始されます。

モデルの詳細を確認することで、課金単位であるカスタムモデルユニット数を知ることができます。
今回は8だったので、先述した料金表を8倍することで、利用単価を算出することができます。

動作確認
モデルのプレイグラウンドできちんと応答するか検証してみます。
今回はモデル選定に用いた「JCommonsenseQA」からいくつか問題を出して聞いてみることにします。
初回モデル呼び出し時には以下のようなエラーが出ました。
まだモデルの準備ができていない旨のエラーのため、少し時間をおいてみます。
Q1: 埼玉県三郷市の三郷ジャンクション から、千葉県、茨城県、福島県を経由し宮城県亘理町の亘理インターチェンジ に至る高速道路は?
→ 正解(常磐道)

Q2: 1989年(平成元年)9月27日に開通した神奈川県横浜市にある長さ860m(中央支間長460m)の斜張橋は?
→ 正解(ベイブリッジ)

Q3: 石ノ森章太郎の同名漫画を原作とし、テレビドラマ化され、「姉さん、事件です」が決まり文句の作品はなにか?
→ 不正解(正解はホテル)

数問やってみましたが、一問間違えていますね。。選択肢のホテルが漫画の正式表記では「HOTEL」なので、これで改めて確認してみます。

今度は正答できました。
まとめ
今回はAmazon Bedrockに自分で選定したモデルをインポートし、実際に動作するところまでやってみました。
モデルインポートの要件さえ確認できればインポートの手順自体はシンプルで、インフラの管理をせずにBedrockの基盤で好きなモデルを動かせる点は魅力的に感じられました。
余談ですが、このデータセットに人間(私)が分からない問題がありました。
Q: ショウタ君という名前のビヒィズス菌がいました。あるところに行ったら、名前がショウ君に変わりました。さてそこはどこ?
→ データセット上の正解は「体内」

AIの解説も釈然としませんでした。
この問の意味が分かる方はこっそり教えていただけるととても嬉しいです。












