優れたソフトウェアと実用的なチュートリアル
AWS Bedrock に DeepSeek R1 をデプロイする方法
DeepSeekは世界に衝撃を与え、その人気は同年にリリースされたChatGPTに匹敵するほどです。Amazon CloudはDeepSeekの導入を初めてサポートしました。ここでは、DeepSeekの導入方法をご紹介します。
AWS ベッドロック 現在サポートされているカスタムモデルのインポート機能ですが、2025年1月時点では、 ラマ建築、Qwenアーキテクチャは現在サポートされていませんしたがって、輸入する際には ディープシークR1 この蒸留モデルのセットは、Qwenアーキテクチャに基づいて32Bバージョンを選択することはできません、唯一利用可能な 8Bおよび70BパラメータのLlamaバージョンこの展開では、 バージョン70B、そして使用する カスタムモデルのインポート 機能、Bedrock へのモデルのインポートとデプロイメントを完了します。
Amazon Cloud アカウントをまだお持ちでない場合は、まずアカウントを申請してください。
Amazonクラウドへの登録はとても簡単です。まずは、以下の公式サイト入口からAmazon公式サイトにアクセスしてください。
詳細な登録チュートリアル:2025 年に AWS EC2 無料クラウド サーバーを無料で申請する、乳母レベルのチュートリアル!
注:以下のチュートリアルでは、Amazon Cloudへの料金が発生するDeepSeekをデプロイします。無料のデプロイチュートリアルではないため、初心者には適していません。ご注意ください。
DeepSeek R1 モデルファイルを S3 バケットにダウンロードします。
DeepSeek R1モデルをダウンロードする際は、そのアーキテクチャが要件を満たしていることを確認する必要があります。2025年1月現在、AWS BedrockはLlamaなどのアーキテクチャのモデルのインポートのみをサポートしており、Qwenアーキテクチャはサポートしていません。DeepSeek R1のQwen-7Bバージョンをダウンロードした場合、インポートタスクの開始時に次のエラーメッセージが表示されます。
「Amazon Bedrock は、インポートしようとしているモデルのアーキテクチャ (qwen2) をサポートしていません。サポートされている次のアーキテクチャのいずれかでもう一度お試しください: [llama、mistral、t5、mixtral、gpt_bigcode、mllama、poolside]。」
したがって、アーキテクチャの非互換性によるタスクの失敗を回避するために、インポートする前にモデルのアーキテクチャを必ず確認してください。
クラウドサーバーEC2インスタンスを作成する
us-west-2(オレゴン)リージョンを例にとると、まずはEC2インスタンスを作成し、t3.mediumモデル(2 vCPU / 4GBメモリ)を選択し、オペレーティングシステムとして最新バージョンのAmazon Linux 2023をインストールします。
ストレージ構成に関しては、200GBのgp3ディスクを選択し、EBSディスクのスループットをデフォルトの125MB/秒から1000MB/秒に増やすことで、アップロードとダウンロードの速度を向上させます。さらに、必要なファイルやソフトウェアのダウンロードを容易にするために、インスタンスが外部ネットワークにアクセスできることを確認してください。
インスタンスが作成されたら、後続の設定と使用のために必要なソフトウェア パッケージを EC2 にインストールします。
yum install python3-pip -y pip install huggingface_hub boto3
次の内容を含む download.py ファイルを作成します。
huggingface_hub からスナップショットをダウンロードして、model_id に "deepseek-ai/DeepSeek-R1-Distill-Llama-70B"、local_dir に snapshot_download(repo_id に model_id、local_dir に "DeepSeek-R1-Distill-Llama-70B") をインポートします。
次に、python3 download.py を実行してモデルをダウンロードします。ダウンロード中です。
ダウンロードが完了すると、EC2クラウドサーバー上に一連のdeepseekファイルが取得されます。Llama 70bパラメータモデルに基づくと、ファイルサイズは約132GBです。
AWSでS3バケットを作成しアップロードする
S3バケットを作成します。バケットを作成する際、バケットタイプとして「汎用」を選択します。リージョンはEC2リージョンに対応している必要があります。例えば、どちらもオレゴン州のus-west-2リージョンです。その他のオプションはデフォルト値のままにしておきます。このバケットはパブリックアクセスである必要はありません。
AWS コンソールの S3 メニューで、「バケットの作成」をクリックします。
バケットの作成プロセス中に、パブリック アクセスが必要ない場合は、バケット名を入力し、他のオプションはデフォルトのままにして、[作成] をクリックします。
右上隅のアカウント メニューで [セキュリティ資格情報] をクリックし、[アクセス キー] オプションでアクセス キーを作成します。
「アクセス キーの作成」をクリックした後、ルート ユーザーのアクセス キーを作成します。アクセスキーを作成するかどうかを選択します。
「アクセスキーの作成」をクリックすると、ルートアクセスキーが正常に作成されます。
このキーはAWS全体へのアクセスキーです。セキュリティ上の理由から、公開しないでください。
バケットを作成したら、次のファイルセットをアップロードする必要があります。
- モデル構成ファイル: config.json
- トークナイザーファイル: 合計3つあります: tokenizer.json、tokenizer_config.json、tokenizer.mode
- モデル重みファイル: 前のステップでダウンロードしたモデル重みファイルは、拡張子が.safetensorsの大量のファイルです。
これらのファイルはすべて前の手順でダウンロードしたディレクトリ内にあるため、追加する必要はありません。
次に、次の内容を含む upload.py という名前のアップロード ファイルを準備します。
boto3 をインポートします。import os s3_client = boto3.client('s3',region_name='us-west-2')、bucket_name = 'bedrock-custom-model-import-123456789012'、local_directory = 'DeepSeek-R1-Distill-Llama-70B'、root、dirs、files を os.walk(local_directory):、files を files:、local_path = os.path.join(root, file)、s3_key = os.path.relpath(local_path, local_directory)、s3_client.upload_file(local_path, bucket_name, s3_key)
上記ファイルのバケット名を実際のバケット名に置き換え、リージョンを実際のリージョンに置き換え、前の手順でダウンロードしたディレクトリが正しいことを確認してください。次に、このEC2にS3へのファイルアップロード権限があることを確認する必要があります。これは、1) ローカルマシンでAWSCLIキーを設定するか、2) ローカルマシンでキーを設定せずにEC2にIAMロールを設定し、そのIAMロールにS3への書き込み権限を追加することで確認できます。
設定後、python3 upload.py を実行してアップロードします。70Bモデルは合計約132GBで、S3へのアップロードには5~10分かかります。
DeepSeek R1モデルをBedrockにインポートする
ステップ1: モデルのインポート
対応するエリアのBedrockサービスを入力し、エリアが正しいことを確認して、左側のメニューをクリックします。輸入モデル
次に、インポートモデル
インポートボタン。下のスクリーンショットをご覧ください。

インポートウィザードの最初のステップで、インポートするモデルの名前を入力します。ここではディープシーク-r1-蒸留-70b
つまり、バージョン番号が名前として使用されます。このページのオプションは変更する必要はありません。画面を下にスクロールしてください。スクリーンショットは以下の通りです。

「モデルのインポート設定」セクションで、前の手順でモデルをアップロードしたバケットの名前を入力します。前の手順のPythonスクリプトはモデルファイルをバケットのルートディレクトリにアップロードするため、ここではバケット名のみを入力してください。以下で、モデルのインポートに使用したサービスロールの場所を選択します。新しいサービスロールを作成して使用する
事前にIAMロールを手動で作成する必要はありません。モデルのインポートウィザードが自動的に作成します。次に、ページの一番下までスクロールし、「モデルのインポート」ボタンをクリックします。下のスクリーンショットをご覧ください。

送信後、ウィザードはモデルのインポートに必要なIAMロールを自動的に作成します。この時点ではブラウザはページを離れることはできません。IAMロールの作成後、モデルのインポートタスクが自動的に送信され、タスクはバックグラウンドに転送されます。ブラウザは現在のページを離れることができます。下のスクリーンショットをご覧ください。

約1分後、IAMロールが作成され、ウェブページは自動的にモデルのインポートタスクが進行中のインターフェースに切り替わります。この時点で現在のページを離れることができます。モデルのインポートプロセス全体は、インポートするモデルのサイズに応じて15~30分、あるいはそれ以上かかる場合があります。次のスクリーンショットをご覧ください。

しばらく待つと、インポートが成功します。下のスクリーンショットをご覧ください。

次に、テストを開始します。
ステップ2: Bedrockコンソールからテストを起動する
Bedrockサービスに入り、左側をクリックします遊び場
メニューの右側にあるモードドロップダウンボックスから、単一プロンプト
カスタムモデルをインポートした後は、Bedrockコンソールの「Single Prompt」でのみカスタムモデルが表示されることに注意してください。下のスクリーンショットをご覧ください。

次に、モデルプロバイダーリストで、カスタムおよび管理エンドポイント
以下がインポートしたモデルです。「適用」をクリックして使用を開始してください。下のスクリーンショットをご覧ください。

カスタムモデルをBedrockにインポートした後、モデルは実際には起動されないことに注意してください。そのため、モデルが初めて呼び出されると、GPUリソースプールにロードされます。このプロセスには数十秒のコールドスタートが含まれます。モデルが起動すると、それ以降の呼び出しは遅延なく直接出力できます。5分以内にモデルが呼び出されない場合、モデルが占有していたGPUリソースが解放され、モデルが再度呼び出されたときにコールドスタートの問題が発生します。
コンソールのプレイグラウンドで、インポートしたカスタムモデルを呼び出します。プロンプトワードには特定の書き方があり、以下の形式で入力する必要があります。
<|begin▁of▁sentence|><|User|> あなたは何のモデルですか|アシスタント|>
入力後、ページの上部にモデルの推論がまだ準備ができていないことを示す赤いプロンプトボックスが表示されます。モデルは推論の準備ができていません
モデルが正常に動作していることを確認するには、数十秒待ってから再度送信する必要があります。次のスクリーンショットをご覧ください。
では、より複雑な例に切り替えて、考えてみましょう。次のプロンプトを入力して送信してください。スクリーンショットは以下の通りです。
<|begin▁of▁sentence|><|User|>以下の財務データがあります。 - 会社Aの収益は2023年に$10Mから$15Mに増加しました - 営業費用は20%増加しました - 当初の営業費用は$7Mでした 2023年の会社の営業利益を計算してください。段階的に推論し、最終的な答えを\\boxed{}内に記入してください。<|Assistant|>

モデルが推論を非常にうまく完了していることがわかります。

以下の API 呼び出しを行ってください。
ステップ3: Bedrock APIからテストを起動する
Bedrock API を呼び出す前に、モデル ID を取得する必要があります。モデル ID は ARN 文字列で、以下の場所から取得できます。次のスクリーンショットをご覧ください。

次に、次の Python コードを準備します。
boto3 をインポートします。import json をインポートします。client = boto3.client('bedrock-runtime',region_name='us-west-2') model_id = 'arn:aws:bedrock:us-west-2:133129065110:imported-model/otk6ql88yk9i' prompt = "どのモデルですか?" response = client.invoke_model( modelId=model_id, body=json.dumps({'prompt': prompt}), accept='application/json', contentType='application/json' ) result = json.loads(response['body'].read().decode('utf-8')) print(result)
先ほどBedrockコンソールを呼び出してモデルを起動した場合、このPythonプログラムの実行時にコールドスタート時間は発生せず、モデルをすぐに呼び出すことができます。実行後に返される結果は次のとおりです。
{'世代': '? \n\n
\n\n \n\nこんにちは!中国のDeepSeek社が開発したインテリジェントアシスタント、DeepSeek-R1です。ご質問があれば、できる限りお手伝いさせていただきます。', 'generation_token_count': 52, 'stop_reason': 'stop', 'prompt_token_count': 4}
このカスタムモデルは正常に動作します。
カスタムモデルのコールドスタートにコードを適応させたい場合は、例外処理を追加できます。再試行回数と例外処理を増やした後のコードは以下のとおりです。
import boto3 import json from botocore.config import Config config = Config( retries={ 'total_max_attempts': 10, 'mode': 'standard' } ) client = boto3.client('bedrock-runtime',region_name='us-west-2',config=config) model_id = 'arn:aws:bedrock:us-west-2:133129065110:imported-model/otk6ql88yk9i' prompt = "どのモデルですか?"試してください: response = client.invoke_model( modelId=model_id, body=json.dumps({'prompt': prompt}), accept='application/json', contentType='application/json' ) result = json.loads(response['body'].read().decode('utf-8')) print(result) except Exception as e: print(e) print(e.__repr__())
Bedrockインポートカスタムモデル使用シナリオ料金の説明
Bedrock では、カスタムモデルのインポート料金は、入力トークンと出力トークンではなく、インポート後にモデルを実行するために使用されたコンピューティングリソースに基づいて課金されます。以下の料金表は AWS 公式サイトでご覧いただけます。下のスクリーンショットをご覧ください。

モデル保管料
公式の説明によると、8bモデルをインポートすると、カスタムモデルユニットが2つ使用されます。70bパラメータモデルをインポートすると、カスタムモデルユニットが8つ使用されます。ディープシーク-r1-蒸留-70b
例えば、モデルは8つのカスタムモデルユニットを占有するため、その保管料金は$1.95 * 8 = $15.6
1ヶ月です。
単一コピーのコンピューティングリソース料金
カスタムモデルのインポートの計算時間は5分単位です。5分後にモデルの呼び出しがない場合、計算リソースは自動的に解放されます。次にモデルが呼び出される際には、コールドスタートの読み込み時間が発生します。たとえば、モデルをインポートした場合、インポートプロセスには料金はかかりません。モデルはまだ呼び出されていません。今月はストレージ料金が課金されますが、計算時間は課金されません。モデルへの最初の呼び出しは、モデルがインポートされた翌朝10:00に行われました。このとき、10:00から10:05までの5分間のウィンドウは、8つのカスタムモデルユニットの使用に応じて課金されます。上記のスクリーンショットからわかるように、料金は$0.0785 /分 /モジュール * 8モジュール * 5分 = $3.14
これは、このモデルを 5 分間実行する場合のコストです。
最初の5分間のウィンドウは10:05に終了し、モデルはさらに5分間実行を続けます。2番目の5分間のウィンドウにモデル呼び出しがない場合、モデルは10:10にリソースを解放し、合計2つの5分間ウィンドウ料金が発生します。2番目の5分間のウィンドウにモデルが再度呼び出された場合、例えばモデルが10:07に呼び出された場合、2番目の5分間の課金ウィンドウが記録され、10:10から3つの5分間の課金ウィンドウが開始されます。3番目の5分間のウィンドウである10:10から10:15までの間にユーザーアクセスがない場合、合計3つの5分間ウィンドウが実行され、合計料金は$3.14 * 3 = $9.42
このロジックによれば、通話を継続すると、5 分間の時間枠に基づいて引き続き課金されます。
しばらく実行すると、70bモデルが8つのコンピューティングユニット、合計4回の5分サイクル、合計20分の計算を消費していることがわかります。この費用は、約24時間後にこのAWSアカウントの請求書で確認できます。下のスクリーンショットをご覧ください。

このことから、インポートするとディープシーク-r1-蒸留-70b
モデルを1ヶ月間24時間365日稼働させた場合、総コストは次のようになります。$0.0785 モジュールあたり 1 分 × 8 モジュール × 60 分 × 24 時間 × 30 日 = $27129.6(1ヶ月分の料金)。
これは、70Bパラメータのモデルは数百GBのビデオメモリを消費し、8枚のGPUカードを搭載したハードウェアで実行する必要があるためです。そのため、一日中API呼び出しが行われると、コストは比較的高くなります。
基盤となる弾性スケーリングとマルチレプリケーション
上記は、モデルをインポートした後にレプリカを実行する状況です。レプリカを起動すると、8つのカスタムモデルユニットが消費されます。この時点で、8つのカスタムモデルユニットのトークン入出力には追加料金がかかりません。ただし、レプリカの起動には無制限のスループットがあるわけではありません。モデルの各レプリカの最大スループットと同時実行数の制限はモデル自体によって異なり、特定のパラメータサイズのモデルをインポートすると自動的に決定されます。Bedrockはデフォルトで1つのレプリカを起動します。トラフィック量の多い呼び出しの場合、Bedrockは自動スケーリング機能を提供します。スループットが1つのレプリカによって保持されるハードウェアリソースを完全に利用する場合、2つ目と3つ目のレプリカに自動的に拡張されます。もちろん、新しいレプリカを起動すると、さらに8つのカスタムモデルユニットが消費され、分単位で課金されます。現在、AWSアカウントのデフォルトのクォータ値は3です。つまり、同時実行可能なカスタムモデルを追加した後、最大3つのレプリカまでしか拡張できません。さらに拡張が必要な場合は、サポートケースを開いて制限の引き上げを申請してください。
コストとモデルパラメータサイズの選択について
DeepSeekモデルは思考能力を備えているため、8Bパラメータモデルは多くのシナリオで優れた性能を発揮します。そのため、この記事では主に70Bパラメータモデルを用いてBedrockの運用プロセス全体を説明します。実際のビジネスユースでは、8Bパラメータモデルを試用することで、コストと効果の最適なバランスを実現できます。
AWS 中国公式サイト:https://www.amazonaws.cn/