Flask で Llama3 にアクセスするには?

Flask で Llama3 にアクセスするには?

ソースノード: 2556782

概要

Llama3 のリリースにより、AI の世界はさらにエキサイティングになりました。 Meta によって作成されたこの強力なオープンソース言語モデルは、事態を大きく揺るがしています。 Llama3 は、8B および 70B の事前トレーニング済みおよび命令調整済みのバリアントで利用可能で、幅広いアプリケーションを提供します。このガイドでは、Llama3 の機能と、Llama3 にアクセスする方法について説明します。 フラスコ、生成 AI に革命をもたらす可能性に焦点を当てています。

学習目標

  • Llama3 の背後にあるアーキテクチャとトレーニング方法論を調査し、その革新的な事前トレーニング データと 微調整 卓越したパフォーマンスを理解するために不可欠なテクニック。
  • Flask を通じて Llama3 の実践的な実装を体験し、トランスフォーマーを使用したテキスト生成の技術を習得しながら、安全性のテストと調整の重要な側面についての洞察を獲得します。
  • 強化された精度、適応性、堅牢なスケーラビリティなど、Llama3 の優れた機能を分析すると同時に、責任ある使用と開発に不可欠な限界と潜在的なリスクも認識します。
  • Llama3 の実例とユースケースを活用することで、さまざまなアプリケーションやシナリオで LlamaXNUMX の力を効果的に活用できるようになり、生成 AI の領域で LlamaXNUMX の可能性を最大限に引き出すことができます。

この記事は、の一部として公開されました データサイエンスブログ。

目次

Llama3 のアーキテクチャとトレーニング

ラマ3 は、最適化されたトランスフォーマー アーキテクチャを利用する自己回帰言語モデルです。はい、通常のトランスですが、アップグレードされたアプローチが施されています。調整されたバージョンでは、教師あり微調整 (SFT) とヒューマン フィードバックを伴う強化学習 (RLHF) が採用され、有用性と安全性に対する人間の好みに合わせられます。このモデルは、公的に入手可能なソースからの 15 兆を超えるデータ トークンの広範なコーパスで事前トレーニングされており、2023B モデルは 8 年 2023 月、70B モデルは 10 年 XNUMX 月がそれぞれカットオフとなります。微調整データには、公開されている指示データセットと、人間が注釈を付けた XNUMX 万を超えるサンプルが組み込まれています。

Llama3 とフラスコ

Llama3 の優れた機能

以前に述べたように、Llama3 は最適化されたトランス設計を備えており、事前トレーニング済みバージョンと命令調整済みバージョンの両方で 8B と 70B パラメーターの 128 つのサイズが用意されています。モデルのトークナイザーには 8,192K のトークン語彙があります。モデルのトレーニングには 3 個のトークンのシーケンスが使用されました。 LlamaXNUMX は次のような驚くべき能力を備えていることが証明されています。

  • 精度の向上: Llama3 は、さまざまな自然言語処理タスクのパフォーマンスが向上していることを示しています。
  • 適応性: このモデルは多様なコンテキストやタスクに適応できるため、幅広いアプリケーションにとって理想的な選択肢となります。
  • 堅牢なスケーラビリティ: Llama3 のスケーラビリティにより、大量のデータや複雑なタスクを簡単に処理できます。
  • コーディング機能: Llama3 のコーディング能力は、250 秒あたり XNUMX 以上の驚異的なトークンを処理できるという、驚くべきものであることが認められています。ゴールデン GPU の代わりに、LPU の効率は比類のないものであり、大規模な言語モデルを実行するための優れた選択肢となります。

Llama3 の最も重要な利点は、オープンソースで無料であるため、開発者が大金を費やすことなくアクセスできることです。

ラマ3とフラスコ

Llama3 のバリアントと機能

前述したように、Llama3 には 8 つの主要なバリエーションがあり、それぞれが 70B と XNUMXB の XNUMX つのサイズで異なるユースケースに対応します。

  • 事前トレーニング済みモデル: 自然言語生成タスクに適しています。パフォーマンスに関してはもう少し一般的です。
  • 命令チューニングされたモデル: 対話のユースケース向けに最適化されており、業界ベンチマークで多くのオープンソース チャット モデルを上回ります。

Llama3 トレーニング データとベンチマーク

Llama3 は、公開データの 15 兆トークンを超える広範なコーパスで事前トレーニングされており、2023B モデルのカットオフは 8 年 2023 月、70B モデルのカットオフは 10 年 XNUMX 月です。微調整データには、公開されている指示データセットと人間が注釈を付けた XNUMX 万を超えるサンプルが組み込まれています (当然のことです!)。このモデルは、MMLU、AGIEval English、CommonSenseQA などの標準的な自動ベンチマークで優れた結果を達成しました。

llama3

Llama3 の使用例と例

ラマは他のものと同じように使用できます ラマの家族 使い方もとても簡単になったモデルです。基本的には変圧器を設置して加速する必要があります。このセクションではラッパー スクリプトについて説明します。コード スニペット全体と GPU で実行するノートブックを見つけることができます。 ページ をご覧ください モデルの動作をテストするために、ノートブック、フラスコ アプリ、および対話型モード スクリプトを追加しました。 Llama3 をパイプラインで使用する例を次に示します。

Flask で Llama3 にアクセスするには?

次に、Flask を使用して Llama3 にアクセスする手順を見てみましょう。

ステップ 1: Python 環境をセットアップする

仮想環境を作成します (オプションですが推奨)。

$ python -m venv env
$ source env/bin/activate   # On Windows use `.envScriptsactivate`

必要なパッケージをインストールします。

トランスフォーマーをインストールして高速化しますが、Llama3 は新しいため、Git Hub から直接インストールして進めます。

(env) $ pip install -q git+https://github.com/huggingface/transformers.git
(env) $ pip install -q flask transformers torch accelerate # datasets peft bitsandbytes

ステップ2: メインアプリケーションファイルを準備する

main.py という名前の新しい Python ファイルを作成します。その中に次のコードを貼り付けます。

from flask import Flask, request, jsonify
import transformers
import torch

app = Flask(__name__)

# Initialize the model and pipeline outside of the function to avoid unnecessary reloading
model_id = "meta-llama/Meta-Llama-3-8B-Instruct"
pipeline = transformers.pipeline(
    "text-generation",
    model=model_id,
    model_kwargs={"torch_dtype": torch.bfloat16},
    device_map="auto",
)


@app.route('/generate', methods=['POST'])
def generate():
    data = request.get_json()
    user_message = data.get('message')

    if not user_message:
        return jsonify({'error': 'No message provided.'}), 400

    # Create system message
    messages = [{"role": "system", "content": "You are a pirate chatbot who always responds in pirate speak!"}]

    # Add user message
    messages.append({"role": "user", "content": user_message})

    prompt = pipeline.tokenizer.apply_chat_template(
        messages,
        tokenize=False,
        add_generation_prompt=True
    )

    terminators = [
        pipeline.tokenizer.eos_token_id,
        pipeline.tokenizer.convert_tokens_to_ids("<|eot_id|>")
    ]

    outputs = pipeline(
        prompt,
        max_new_tokens=256,
        eos_token_id=terminators,
        do_sample=True,
        temperature=0.6,
        top_p=0.9,
    )

    generated_text = outputs[0]['generated_text'][len(prompt):].strip()
    response = {
        'message': generated_text
    }

    return jsonify(response), 200


if __name__ == '__main__':
    app.run(debug=True)

上記のコードは、単一のルートを使用して Flask Web サーバーを初期化します。 /生む、ユーザーメッセージを受信して​​処理し、AI が生成した応答を返す責任があります。

ステップ 3: Flask アプリケーションを実行する

次のコマンドを実行して、Flask アプリを実行します。

(env) $ export FLASK_APP=main.py
(env) $ flask run --port=5000

これで、Flask アプリが次の場所で実行されているはずです。 http://localhost:5000。 Postman や CURL などのツールを使用して API をテストしたり、単純な HTML フロントエンド ページを作成したりすることもできます。

トランスフォーマー AutoModelForCausalLM を使用したインタラクティブ モード

Jupyter Notebook 内でモデルを対話的にクエリするには、これをセルに貼り付けて実行します。

import requests
import sys
sys.path.insert(0,'..')
import torch

from transformers import AutoTokenizer, AutoModelForCausalLM

MODEL_NAME ='meta-llama/Meta-Llama-3-8B-Instruct'

class InteractivePirateChatbot:
    def __init__(self):
        self._tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME, padding_side='left')
        self._tokenizer.pad_token = self._tokenizer.eos_token
        self._model = AutoModelForCausalLM.from_pretrained(MODEL_NAME, torch_dtype=torch.bfloat16, device_map="auto", offload_buffers=True)
        
    def _prepare_inputs(self, messages):
        try:
            inputs = self._tokenizer([message['content'] for message in messages], padding='longest', truncation=True, max_length=512, return_tensors='pt')
            input_ids = inputs.input_ids.to(self._model.device)
            attention_mask = inputs.attention_mask.to(self._model.device)
            return {'input_ids': input_ids, 'attention_mask': attention_mask}
        except Exception as e:
            print(f"Error preparing inputs: {e}")
            return None

    def ask(self, question):
        try:
            messages = [
                {"role": "system", "content": "You are a pirate chatbot who always responds in pirate speak!"},
                {"role": "user", "content": question}
            ]

            prepared_data = self._prepare_inputs(messages)
            if prepared_data is None:
                print("Error preparing inputs. Skipping...")
                return

            output = self._model.generate(**prepared_data, max_length=512, num_beams=5, early_stopping=True)

            answer = self._tokenizer.decode(output[0], skip_special_tokens=True)
            print("Pirate:", answer)
        except Exception as e:
            print(f"Error generating response: {e}")

generator = InteractivePirateChatbot()
while True:
    question = input("User: ")
    generator.ask(question)

上記のコードを使用すると、モデルをすばやく操作して、モデルがどのように機能するかを確認できます。コード全体を見つける こちら.

User: "Who are you?"

Pirate: "Arrrr, me hearty! Me name be Captain Chat, the scurviest pirate chatbot to ever sail the Seven Seas! I be here to swab yer decks with me clever responses and me trusty parrot, Polly, perched on me shoulder. So hoist the colors, me matey, and let's set sail fer a swashbucklin' good time!"

モデルがどのように機能するかを確認したので、安全性と責任に関するガイドをいくつか見てみましょう。

責任と安全性

Meta は、安全性のベスト プラクティスの実装、Meta Llama Guard 2 や Code Shield セーフガードなどのリソースの提供、責任ある使用ガイドの更新など、責任ある AI 開発を保証する一連の措置を講じています。開発者は、特定のユースケースや対象者に対する調整の利点と有用性を比較検討しながら、ニーズに応じてこれらの安全対策を調整して導入することが推奨されます。これらのリンクはすべて、Llama3 の Hugginface リポジトリで利用できます。

倫理的考慮事項と制限

Llama3 は強力なツールですが、その限界と潜在的なリスクを認識することが重要です。このモデルは、ユーザーのプロンプトに対して不正確、偏った、または不快な応答を生成する可能性があります。したがって、開発者は、モデルの特定のアプリケーションに合わせた安全性テストと調整を実行する必要があります。 Meta では、Purple Llama ソリューション、特に Llama Guard をワークフローに組み込むことを推奨しています。Llama Guard は、モデル レベルの安全性の上にシステム レベルの安全性を重ねて入力および出力プロンプトをフィルタリングするための基本モデルを提供します。

まとめ

Meta は、Meta が作成した強力なオープンソース言語モデルである Llama3 の導入により、人工知能の状況を再構築しました。 Llama8 は、70B と 3B の事前トレーニング済みバージョンと命令調整済みバージョンの両方が利用できるため、イノベーションの可能性が数多くあります。このガイドでは、Llama3 の機能と Flask を使用して Llama3 にアクセスする方法を詳しく説明し、Generative AI を再定義する可能性を強調しています。

主要な取り組み

  • Meta が開発した Llama3 は、8B と 70B の両方の事前トレーニング済みおよび命令調整済みバージョンで利用できる強力なオープンソース言語モデルです。
  • Llama3 は、精度、適応性、堅牢な拡張性の向上など、優れた機能を実証しました。
  • このモデルはオープンソースで完全に無料であるため、開発者や低予算の研究者がアクセスできます。
  • ユーザーは、パイプライン抽象化や、generate() 関数を使用した Auto クラスを利用して、トランスフォーマーで Llama3 を利用できます。
  • Llama3 と Flask を使用すると、開発者はジェネレーティブ AI の新たな地平を探索し、チャットボットやコンテンツ生成などの革新的なソリューションを促進し、人間とマシンのインタラクションの境界を押し広げることができます。

よくある質問

Q1. Llama3とは何ですか?

A. Meta が開発した Llama3 は、8B と 70B の両方の事前トレーニング済みおよび命令調整済みバージョンで利用できる強力なオープンソース言語モデルです。

Q2. Llama3 の主な機能は何ですか?

A. Llama3 は、精度、適応性、堅牢な拡張性の向上など、優れた機能を実証しました。調査とテストの結果、より適切でコンテキストを認識した応答が提供され、各ソリューションがユーザーのニーズに合わせて細かく調整されることがわかりました。

Q3. Llama3 はオープンソースで無料ですが、Llama3 を商用目的で使用できますか?

A. はい、Llama3 はオープンソースで完全に無料であるため、開発者は大金を費やすことなくアクセスできます。 Llama3 はオープンソースであり、商用目的で無料で使用できます。ただし、適用される規制を確実に遵守するために、ライセンス契約条件を確認することをお勧めします。

Q4.自分の特定の使用例に合わせて Llama3 を微調整できますか?

A.はい、Llama3 はハイパーパラメータとトレーニング データを調整することで、特定のユースケースに合わせて微調整できます。これは、特定のタスクやデータセットでのモデルのパフォーマンスを向上させるのに役立ちます。

Q5. Llama3 は BERT や RoBERTa などの他の言語モデルとどう比較しますか?

A. Llama3 は、大規模なデータセットでトレーニングされたより高度な言語モデルであり、さまざまな自然言語処理タスクにおいて BERT や RoBERTa よりも優れたパフォーマンスを発揮します。

この記事に示されているメディアは Analytics Vidhya が所有するものではなく、著者の裁量で使用されています。

タイムスタンプ:

より多くの 分析Vidhya