「メタのCode Llamaコード生成モデルは、Amazon SageMaker JumpStartを介して利用可能になりました」
「メタのCode Llamaコード生成モデルがAmazon SageMaker JumpStartを通じて利用可能に」
今日は、Metaによって開発されたCode Llama foundationモデルが、お客様にAmazon SageMaker JumpStartを通じて提供され、ワンクリックで推論実行の展開が可能です。 Code Llamaは、コードと自然言語のプロンプトの両方からコードとコードに関する自然言語を生成することができる最先端の大規模言語モデル(LLM)です。 Code Llamaは、研究および商業利用に無料でご利用いただけます。 SageMaker JumpStartを使用してこのモデルを試すことができます。 SageMaker JumpStartは、アルゴリズム、モデル、および機械学習ソリューションへのアクセスを提供する機械学習(ML)ハブであり、迅速にMLを始めることができます。この投稿では、SageMaker JumpStartを介してCode Llamaモデルを発見して展開する方法について説明します。
Code Llamaとは何ですか
Code Llamaは、Metaによってリリースされたモデルであり、Llama 2をベースに構築され、開発者が高品質で十分に文書化されたコードを作成するのを支援するために設計された最先端のモデルです。このモデルは、Python、C++、Java、PHP、C#、TypeScript、Bashでの最先端のパフォーマンスを示し、開発者の時間を節約し、ソフトウェアのワークフローを効率化する潜在能力を持っています。 3つの異なるバリアントがあり、幅広いアプリケーションをカバーするようにエンジニアリングされています:基礎モデル(Code Llama)、Python専門モデル(Code Llama-Python)、自然言語の指示を理解するための指示フォローモデル(Code Llama-Instruct)。すべてのCode Llamaバリアントには、7B、13B、34Bのパラメータがあります。 7Bおよび13Bのベースおよびinstructバリアントは、周囲のコンテンツに基づいて埋め込みをサポートしており、コードアシスタントアプリケーションに最適です。
これらのモデルは、Llama 2をベースに設計され、その後、コードデータの5000億トークンでトレーニングされました。 Python専門バージョンは追加の1000億トークンでトレーニングされました。 Code Llamaモデルは、最大100,000トークンのコンテキストで安定した生成を提供します。すべてのモデルは、16,000トークンのシーケンスでトレーニングされ、最大100,000トークンの入力での改善が示されています。
モデルは、Llama 2と同じコミュニティライセンスで提供されています。
- エッジでの視覚品質検査のためのエンド・ツー・エンドMLOpsパイプラインの構築-パート2
- エッジでのビジュアル品質検査のためのエンドツーエンドのMLOpsパイプラインの構築-パート3
- カスタム分類モデルでの予測の品質を向上させるには、Amazon Comprehendを使用します
SageMaker JumpStartとは何ですか
SageMaker JumpStartでは、ML実践者はベストパフォーミングのfoundationモデルを選択できます。 ML実践者は、SageMakerを使用してモデルのトレーニングと展開をカスタマイズするために、ネットワーク分離された環境内の専用のAmazon SageMakerインスタンスにfoundationモデルを展開できます。
Amazon SageMaker StudioまたはSageMaker Python SDKを使用して、数回のクリックでCode Llamaモデルを発見し、展開することができます。これにより、SageMakerの機能であるAmazon SageMaker Pipelines、Amazon SageMaker Debugger、またはコンテナログを使用してモデルのパフォーマンスとMLOpsの制御を派生させることができます。モデルはAWSの安全な環境で展開され、VPCの制御下で保護されたデータセキュリティを保証します。 Code Llamaモデルは発見可能であり、米国東部(北バージニア)、米国西部(オレゴン)、およびヨーロッパ(アイルランド)のリージョンで展開できます。
モデルを展開するには、お客様はEULAを承諾する必要があります(SageMaker SDKを使用してモデルを
モデルの発見
Code Llama foundationモデルには、SageMaker Studio UIおよびSageMaker Python SDKを介してSageMaker JumpStartからアクセスできます。このセクションでは、SageMaker Studioでモデルを発見する方法について説明します。
SageMaker Studioは、ML開発ステップ全体を実行するための特別なツールにアクセスできる単一のWebベースのビジュアルインターフェースを提供する統合開発環境(IDE)です。データの準備からMLモデルの構築、トレーニング、展開まで、すべてのML開発手順を実行できます。 SageMaker Studioの開始方法とセットアップについての詳細については、Amazon SageMaker Studioを参照してください。
In SageMaker Studio、プレトレーニングモデル、ノートブック、およびプリビルドソリューションを含む、SageMaker JumpStart にアクセスすることができます。これらはPrebuilt and automated solutionsにあります。
SageMaker JumpStart ランディングページでは、ソリューション、モデル、ノートブック、その他のリソースを閲覧することができます。 Foundation Models: Text Generationのカルーセル内に、Code Llama モデルを見つけることができます。
また、Explore all Text Generation Modelsを選択するか、Code Llama を検索して他のモデルのバリエーションを見つけることもできます。
モデルの詳細(ライセンス、トレーニングに使用されたデータ、使用方法など)を表示するために、モデルカードを選択することができます。また、DeployとOpen Notebookの2つのボタンもあり、これらを使用してモデルを利用することができます。
Deploy
Deployを選択して利用規約に同意すると、デプロイが開始されます。または、Open Notebookを選択して、サンプルノートブックを使用してデプロイすることもできます。このサンプルノートブックにはモデルを推論する方法とリソースをクリーンアップする方法が提供されます。
ノートブックを使用してデプロイするには、model_id
で指定された適切なモデルを選択することから始めます。SageMaker 上の選択したモデルのいずれかを次のコードでデプロイすることができます:
from sagemaker.jumpstart.model import JumpStartModelmodel = JumpStartModel(model_id="meta-textgeneration-llama-codellama-7b")predictor = model.deploy()
これにより、デフォルトの設定(デフォルトのインスタンスタイプおよびデフォルトのVPC設定を含む)でモデルがSageMaker上にデプロイされます。これらの設定を変更するには、JumpStartModelでデフォルトでない値を指定します。デプロイ後、SageMakerの派生エンドポイントで推論を実行することができます。
payload = { "inputs": "<s>[INST] How do I deploy a model on Amazon SageMaker? [/INST]", "parameters": {"max_new_tokens": 512, "temperature": 0.2, "top_p": 0.9}}predictor.predict(payload, custom_attributes="accept_eula=true")
デフォルトでは、accept_eula
はfalse
に設定されています。エンドポイントを正常に呼び出すには、accept_eula=true
を設定する必要があります。これにより、ユーザーライセンス契約と利用条件に同意したことになります。ライセンス契約をダウンロードすることもできます。
EULAを渡すために使用されるCustom_attributes
は、キー/値ペアです。キーと値は=で区切られ、ペアは;で区切られます。ユーザーが同じキーを複数回渡す場合、最後の値が保持され、スクリプトハンドラに渡されます(この場合、条件付きロジックに使用されます)。たとえば、accept_eula=false; accept_eula=true
がサーバーに渡された場合、accept_eula=true
が保持され、スクリプトハンドラに渡されます。
推論パラメータはエンドポイント上のテキスト生成プロセスを制御します。最大新トークン数は、モデルが生成する出力のサイズを制御します。ただし、これは単語数と同じではありません。モデルの語彙と英語の語彙は異なり、各トークンが英語の単語であるとは限りません。Temperatureは、出力のランダム性を制御します。高いTemperatureはより創造的かつ幻覚的な出力を生成します。推論パラメータはすべてオプションです。
以下の表は、SageMaker JumpStartで利用可能なすべてのCode LlamaモデルをモデルID、デフォルトのインスタンスタイプ、および各モデルに対してサポートされる最大トークン数(すべての同時リクエストの入力トークン数と生成トークン数の合計)とともにリストアップしています。
モデル名 | モデルID | デフォルトのインスタンスタイプ | サポートされる最大トークン数 |
CodeLlama-7b | meta-textgeneration-llama-codellama-7b | ml.g5.2xlarge | 10000 |
CodeLlama-7b-Instruct | meta-textgeneration-llama-codellama-7b-instruct | ml.g5.2xlarge | 10000 |
CodeLlama-7b-Python | meta-textgeneration-llama-codellama-7b-python | ml.g5.2xlarge | 10000 |
CodeLlama-13b | meta-textgeneration-llama-codellama-13b | ml.g5.12xlarge | 32000 |
CodeLlama-13b-Instruct | meta-textgeneration-llama-codellama-13b-instruct | ml.g5.12xlarge | 32000 |
CodeLlama-13b-Python | meta-textgeneration-llama-codellama-13b-python | ml.g5.12xlarge | 32000 |
CodeLlama-34b | meta-textgeneration-llama-codellama-34b | ml.g5.48xlarge | 48000 |
CodeLlama-34b-Instruct | meta-textgeneration-llama-codellama-34b-instruct | ml.g5.48xlarge | 48000 |
CodeLlama-34b-Python | meta-textgeneration-llama-codellama-34b-python | ml.g5.48xlarge | 48000 |
Code Llamaモデルは16,000トークンのコンテキスト長でトレーニングされていますが、モデルはより大きなコンテキストウィンドウでも良好なパフォーマンスを報告しています。前述の表のサポートされる最大トークン数の列は、デフォルトのインスタンスタイプに対するサポートされるコンテキストウィンドウの上限です。Code Llama 7Bモデルはml.g5.2xlargeインスタンスでのみ10,000トークンをサポートできるため、より大きなコンテキストがアプリケーションに必要な場合は、13Bまたは34Bモデルバージョンを展開することをお勧めします。
デフォルトでは、すべてのモデルはコード生成タスクに使用されます。ベースモデルとインストラクトモデルの両方が補完のタスクに応答しますが、サンプルクエリの大部分に対してベースモデルの方が出力品質が良好でした。最後に、インストラクトモデルのみがインストラクトタスクで動作します。以下の表は、デモノートブックの例のクエリに対して良好なパフォーマンス(Good)と適度なパフォーマンス(Moderate)を示しています。
. | コード生成 | コード補完 | コードの手順 |
CodeLlama-7b | 良い | 良い | なし |
CodeLlama-7b-Instruct | 良い | 適度 | 良い |
CodeLlama-7b-Python | 良い | なし | なし |
CodeLlama-13b | 良い | 良い | なし |
CodeLlama-13b-Instruct | 良い | 適度 | 良い |
CodeLlama-13b-Python | 良い | なし | なし |
CodeLlama-34b | 良い | なし | なし |
CodeLlama-34b-Instruct | 良い | なし | 良い |
CodeLlama-34b-Python | 良い | なし | なし |
コード生成
次の例は、ペイロードパラメータ "parameters": {"max_new_tokens": 256, "temperature": 0.2, "top_p": 0.9}
を使用して、CodeLlama-34b-Instructモデルで実行されました。
Inputimport socketdef ping_exponential_backoff(host: str):Output """ ホストに指数バックオフを使用してPingします。 """ for i in range(1, 10): try: socket.gethostbyname(host) return True except socket.gaierror: time.sleep(2 ** i) return FalseInputimport argparsedef main(string: str): print(string) print(string[::-1])if __name__ == "__main__":Output parser = argparse.ArgumentParser() parser.add_argument("string", help="出力する文字列") args = parser.parse_args() main(args.string)
コード補完
コード補完は、周囲の文脈から生成されたコードを返すことを含みます。このタスクはコード生成と異なるので、プレフィックスのコードセグメントに加えて、モデルにはコードセグメントのサフィックスも提供されます。ファインチューニング中に特殊トークンを使用して、プレフィックスの開始位置(<PRE>
)、サフィックスの開始位置(<SUF>
)、および中間の開始位置(<MID>
)をマークしました。モデルへの入力シーケンスは、次の形式のいずれかである必要があります:
- プレフィックス-サフィックス-中間 –
<PRE> {プレフィックス} <SUF> {サフィックス} <MID>
- サフィックス-プレフィックス-中間 –
<PRE> <SUF> {サフィックス} <MID> {プレフィックス}
次の例は、CodeLlama-7bモデルでプレフィックス-サフィックス-ミドルの形式を使用し、ペイロードが parameters {"max_new_tokens": 256, "temperature": 0.05, "top_p": 0.9}
である場合のものです:
Input<PRE> def remove_non_ascii(s: str) -> str: """ <SUF> return result <MID>Output 文字列から非ASCII文字を削除します。 :param s: 非ASCII文字を削除する対象の文字列です。 :return: 非ASCII文字が削除された文字列です。 """ result = "" for c in s: if ord(c) < 128: result += cInput# インストール手順: ```bash<FILL> ```これにより、LLaMA推論コードがダウンロードされ、リポジトリがローカルpipパッケージとしてインストールされます。Output git clone https://github.com/LLaMA-AI/LLaMA-inference.git cd LLaMA-inference pip install -e .Inputclass InterfaceManagerFactory(AbstractManagerFactory): def __init__(<FILL>def main(): factory = InterfaceManagerFactory(start=datetime.now()) managers = [] for i in range(10): managers.append(factory.build(id=i))Outputself, start=None): self.start = start def build(self, id): return InterfaceManager(id, self.start)Input/-- プレファンクトイドは、すべてのエタリセーションが1連結であるとき、1連結である。 -/定理 connected_iff_etalisation [C D : precategoroid] (P : quasi_prefunctoid C D) : π₁ P = 0 ↔ <FILL> = 0 :=begin split, { intros h f, rw pi_1_etalisation at h, simp [h], refl }, { intro h, have := @quasi_adjoint C D P, simp [←pi_1_etalisation, this, h], refl }endOutput∀ f : C ⟶ D, π₁ (P.etalise f)
コードの指示
Metaでは、Code Llamaの指示に調整されたバリアントも提供されています。このセクションの例のクエリは、指示に調整されたCode Llamaモデルにのみ適用できます。これらのモデルは、モデルIDに instruct 接尾辞を持つモデルです。 Code Llamaの指示の形式は、Llama-2-chat プロンプトの形式と同じであり、詳細についてはSageMaker JumpStartで使用できる Llama 2 foundation モデルで説明しています。
単純なユーザープロンプトは次のようになります:
<s>[INST]{user_prompt}[/INST]
以下の構文を使用して、システムプロンプトを追加することもできます:
<s>[INST] <<SYS>>{system_prompt}<</SYS>>{user_prompt} [/INST]
最後に、モデルとの対話を行う場合は、以前のユーザープロンプトとアシスタントの応答を入力に含めることもできます:
<s>[INST] <<SYS>>{system_prompt}<</SYS>>{user_prompt_1} [/INST] {assistant_response_1} </s><s>[INST] {user_prompt_1} [/INST]
これらの例は、ペイロードが「parameters」: {"max_new_tokens": 512, "temperature": 0.2, "top_p": 0.9}
である CodeLlama-13b-Instructモデルで実行されました:
Input<s>[INST] Bashで、直近の1ヶ月間に変更された現在のディレクトリ内のすべてのテキストファイル(サブディレクトリを除く)を一覧表示するにはどうすればよいですか? [/INST] Output Bashでは、`find` コマンドを使用して、直近の1ヶ月間に変更された現在のディレクトリ内のすべてのテキストファイル(サブディレクトリを除く)を一覧表示することができます。以下は例です:```find . -type f -name "*.txt" -mtime -30```このコマンドの説明は以下の通りです:・ `find .`: `find` に現在のディレクトリとそのサブディレクトリを検索するよう指示します。・ `-type f`: `find` にファイルのみを検索するよう指示します(ディレクトリではない)。・ `-name "*.txt"`: `.txt` 拡張子を持つファイルのみを検索するよう指示します。・ `-mtime -30`: 直近の30日間(2,592,000秒)に変更されたファイルのみを検索するよう指示します。このコマンドの出力は、直近の1ヶ月間に変更された現在のディレクトリ内のすべてのテキストファイル(サブディレクトリを除く)のリストになります。Input<s>[INST] 中順と前順の走査の違いは何ですか?Pythonの例を示してください。 [/INST] Output 中順走査と前順走査は、2つの異なる方法ですが、どちらもバイナリツリーを走査する方法です。中順走査は、バイナリツリーのノードを特定の順序で訪れる方法です。中順走査では、左の部分木が最初に訪れ、次に現在のノードが訪れ、最後に右の部分木が訪れます。つまり、ノードは左から右、上から下の順序で訪れられます。前順走査は、逆にバイナリツリーのノードを異なる順序で訪れる方法です。前順走査では、現在のノードが最初に訪れ、次に左の部分木が訪れ、最後に右の部分木が訪れます。つまり、ノードは上から下、左から右の順序で訪れられます。以下は、Pythonでバイナリツリーの中順走査の例です:```def inorder_traversal(root): if root is None: return [] return inorder_traversal(root.left) + [root.val] + inorder_traversal(root.right)```また、Pythonでバイナリツリーの前順走査の例は以下の通りです:```def preorder_traversal(root): if root is None: return [] return [root.val] + preorder_traversal(root.left) + preorder_traversal(root.right)```この例では、「inorder_traversal」関数は、ツリーの値をキーの順序で、最小から最大の順序でリストとして返します。「preorder_traversal」関数は、ツリーの値をキーの順序でリストとして返しますが、現在のノードは子ノードの前に訪れます。
最後に、指定されたリストの連続したサブリストの合計の集合を計算する関数を書きます。以下はJavaScriptでの例です:
function contiguousSublistSums(list) { let sums = []; for (let i = 0; i < list.length; i++) { let sum = 0; for (let j
片付ける
ノートブックの実行が終わったら、請求が停止されるようにプロセスで作成したすべてのリソースを削除してください。以下のコードを使用してください:
predictor.delete_model()predictor.delete_endpoint()
結論
この投稿では、SageMaker StudioでCode Llamaモデルを開始し、コードと自然言語のプロンプトからコードとコードに関する自然言語を生成するためにモデルを展開する方法を紹介しました。ファウンデーションモデルは事前学習済みであるため、トレーニングおよびインフラストラクチャのコストを低減させ、使用ケースにカスタマイズを可能にします。SageMaker StudioのSageMaker JumpStartにアクセスして、すぐに始めましょう。
リソース
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles