paint-brush
開発者とハッカーの両方としての LLama2 の経験@morpheuslord
5,237 測定値
5,237 測定値

開発者とハッカーの両方としての LLama2 の経験

Morpheuslord18m2023/08/13
Read on Terminal Reader

長すぎる; 読むには

LLama2 の力を解き放つ: HackBot で AI エクスペリエンスを向上させましょう! 🚀 最先端のテクノロジーとサイバーセキュリティ分析が融合した世界に飛び込みましょう。 Meta の LLama2 を利用した当社の HackBot は、AI と現実世界の課題の間の橋渡しをします。直感的なプロンプトを通じて LLama2 とシームレスに対話し、これまでにない方法で脆弱性を発見し、コードを分析します。 LLama2 の高度な機能を利用して、HackBot はカスタマイズされた洞察を提供し、複雑なタスクを解明するコンテキスト認識型の応答を生成します。スキャンデータの解読からコードの複雑さの解明まで、HackBot はセキュリティ分析を合理化し、精度と深さに焦点を当てます。 LLama2 の優れた能力が生き生きとして、人間の理解を反映した会話を形成します。 LLama2 の可能性を活用するためのガイドである HackBot を使用して、AI エンパワーメントの旅に乗り出しましょう。あなたの言語を話す AI を体験し、対話するたびにプロジェクトと洞察を高めてください。
featured image - 開発者とハッカーの両方としての LLama2 の経験
Morpheuslord HackerNoon profile picture
0-item
1-item
2-item
3-item

私のブログ投稿へようこそ。LLama2 モデルの使用に関する私のこれまでの道のりと洞察を共有します。 LLama2 は Meta によって開発された素晴らしい AI モデルであり、GPT-3 を彷彿とさせるその機能を探索するのはエキサイティングです。この投稿では、LLama2 のセットアップ、前提条件、アプリケーション、重要性、さらには自分でトレーニングする方法など、LLama2 のさまざまな側面を掘り下げていきます。 HackBot プロジェクトに取り組んでいる間に得た、LLama2 に関する学習体験を皆さんにご紹介できることを嬉しく思います。

取り上げるトピック

  • LLama2とは何ですか?
  • どうやって始めるのか?
  • HackBot でどのように使用しましたか?
  • モデルをトレーニングするにはどうすればよいですか?
  • 機能と利点。
  • 最後の基調講演。

LLama2とは何ですか?

LLama2 は、Meta によって作成された最先端のテクノロジーであり、その核心は AI モデルとして分類されます。これは、人間の言語を理解し、ほとんど人間と同じような意味のある応答を生成できる、非常に知的なアシスタントだと考えてください。 LLama2 の目標は、人間とコンピュータ間の対話の容易さと自然さを改善することです。


友達と話したり、メールを作成したりするときに、自分の気持ちを口頭でどのように表現するかを考えてみましょう。あなたがコミュニケーションをとっている人々は理解し、反応します。動作も同様で、LLama2 は膨大な量のテキスト データを処理し、そこから学習することができます。これにより、LLama2 は、コンテンツの作成や問題解決の支援だけでなく、情報の配信やクエリへの回答など、さまざまなタスクを支援することが可能になります。


LLama2 のユニークな特徴は、アクセシビリティを念頭に置いて作成されていることです。それは、さまざまなレベルの技術力を持つ誰でも使用できる柔軟な楽器を持っているようなものです。 LLama2 は、開発者、ライター、学生、または単に人工知能に興味がある人であっても、人工知能の可能性にアクセスするためのシンプルなアプローチを提供します。


本質的に、LLama2 は、コンピューターが人間の言語とより簡単かつ効果的に対話できる可能性の領域を作成します。テキストや言語を含むアクティビティを常に手伝ってくれる仮想の友達がいるようなものなので、テクノロジーとのやり取りはより生産的かつ効率的になります。

どうやって始めるのか?

始めるための最初のステップから始めましょう。コードを機能させるために考慮する必要があるタスクは次のとおりです。


言語の選択:

信頼できる旅の相棒として私が最初に選んだのは Python でした。これは、適応性があり、プログラミング コミュニティで広く使用されているため、LLama2 と対話するための優れたオプションです。すでに Python に慣れていれば大丈夫です。


必需品のセットアップ:


  • HuggingFace アカウントと Lama リポジトリへのアクセス:

    開始するには、いくつかの AI モデルとツールを収容するプラットフォームである HuggingFace でアカウントを作成する必要があります。アカウントが準備されていることを確認してください。さらに、Meta の Lama リポジトリへのアクセスを取得すると、LLama2 のコンポーネントを見つけることができます。


  • C/C++ および Cmake のインストール: LLama2 には LLama-cpp と呼ばれるコンポーネントがあり、C/C++ および Cmake がシステムにインストールされている必要があります。これらのツールは LLama-cpp の構築に不可欠であるため、セットアップされ、使用できる状態になっていることを確認してください。


ログインと準備:


  • Huggingface-cli ログイン: HuggingFace アカウントの詳細を用意し、HuggingFace コマンドライン インターフェイスを使用してログインします。この手順では、アカウント トークンを使用して HuggingFace プラットフォームに接続し、必要な AI リソースへのアクセスを許可します。生成されたトークンが見つからない場合は、このURLを使用してトークンを見つけることができます。


    コマンドは次のとおりです。

     $ huggingface-cli login Token: Your_Token


  • LLama-cpp のインストール: Llama-cpp は、llama と Python が連携するための低レベルのアクセス バインダーであり、より高い柔軟性を提供します。


    インストールは 2 つの方法で実行できます。

    • Python の直接インストール:

       pip install llama-cpp-python
    • コンパイル オプション: これについては、モジュールの複雑な説明を説明する Readme を確認する必要があります: README.md


  • Langchain のインストール: Langchain は、LLM モデル アプリケーションの開発を容易にすることを目的としたオープン フレームワークです。このタスクでは、特にLLamaCppPrompTemplateCallbackManager 、およびStreamingStdOutCallbackHandlerモジュールを使用します。


    インストールのコマンドは次のとおりです。

     pip install langchain pip install langchainplus-sdk


Python コードではどのように使用されますか?

さて、一番の問題はそれがどのように使用されるかということです。


統合部分はいくつかのステップに分割できると回答します。


  • モデルのダウンロードと定義:

    • このために、HackBot のコードを参照します。

    • すべての重要なモジュールを呼び出した後、モデル名とそれをダウンロードするリポジトリを決定する必要があります。

       model_name_or_path = "localmodels/Llama-2-7B-Chat-ggml" model_basename = "llama-2-7b-chat.ggmlv3.q4_0.bin" model_path = hf_hub_download(repo_id=model_name_or_path, filename=model_basename)


    • 上記のコードで使用されている llama モジュールは、7b または 70 億のパラメーター モデルと Localmodels バージョンの llama2 です。

    • 次に、model_path は、llama-2-7b-chat.ggmlv3.q4_0.binをリポジトリからシステムにダウンロードする Huggingface ダウンローダーによるモデルのダウンロード パスによって参照されます。

    • LlamaCpp はモデルの場所を参照して使用するため、パスは重要です。


  • ペルソナとプロンプト テンプレートを定義します。

     from langchain import PromptTemplate from langchain.callbacks.manager import CallbackManager from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler template = """ persona: {persona} You are a helpful, respectful, and honest cybersecurity analyst. Being a security analyst, you must scrutinize the details provided to ensure they are usable for penetration testing. Please ensure that your responses are socially unbiased and positive. If a question does not make any sense or is not factually coherent. If you don't know the answer to a question, please don't share false information. Keep your answers in English and do not divert from the question. If the answer to the asked question or query is complete, end your answer. Keep the answer accurate and do not skip details related to the query. Give your output in markdown format. """ prompt = PromptTemplate(template=template, input_variables=["persona"]) callback_manager = CallbackManager([StreamingStdOutCallbackHandler()])
    • ラマをパーソナルアシスタントやサイバーセキュリティアナリストとして定義するなど、ペルソナとして使用するための基本テンプレートを提供する必要があります。

    • テンプレートはモデルがどのように機能するかを定義し、最終出力がどのようなものになるかに大きな影響を与える可能性があるため、細心の注意を払って作成する必要があります。

    • 次に、テンプレート ペルソナとそのペルソナを使用する PromptTemplate モジュールを使用してプロンプトが生成されます。

    • コールバック マネージャーは、AI の出力を表示し、入力リンクと出力リンクを管理するために使用されます。


  • LlamaCpp モジュールを定義します。

     llm = LlamaCpp( model_path=model_path, input={"temperature": 0.75, "max_length": 3500, "top_p": 1}, callback_manager=callback_manager, max_tokens=3500, n_batch=3500, n_gpu_layers=60, verbose=False, n_ctx=3500, streaming=False, )
    • LlamaCpp モジュールは、ダウンロードした LLM モジュールをリンクする接続モジュールです。
    • モジュールが機能するには、ダウンローダーの開始時に事前定義されたモデル パスにモジュールをリンクする必要があります。
    • 最大入力長は入力セクションで定義する必要があり、最大トークンは AI が理解するテキストであると定義する必要があります。
    • 次に、バッチ、GPU レイヤー、および ctx が定義され、ストリーミングが False に設定されて出力が直接表示されなくなり、最終出力をクリーンな状態に保つために変数に保存できるようになります。


これを実装することで、チャットボット バックボーンまたはコネクタが作成され、これを使用して AI モデルとのアクティブな会話を開始できるようになります。

HackBot でどのように使用しましたか?

HackBot は、サイバーセキュリティに特化したチャットボットを作成しようとしたもので、このツールにはスキャンデータ、ログデータ分析ツール、コード分析機能などの機能があります。


  • チャット対話ループ:

     while True: try: prompt_in = Prompt.ask('> ') # ... except KeyboardInterrupt: pass


    このループにより、ユーザーがコマンドまたはプロンプトを入力できる対話型環境が作成されます。このコードは、 Prompt.ask('> ')を使用してユーザー入力を待機し、プログラムをクラッシュさせることなく KeyboardInterrupt (Ctrl+C) などの例外を処理します。このループにより、チャットボットの応答性が維持され、ユーザーと継続的に対話できることが保証されます。


  • ユーザーコマンドの処理:

     if prompt_in == 'quit_bot': quit() elif prompt_in == 'clear_screen': clearscr() pass elif prompt_in == 'bot_banner': # ... elif prompt_in == 'save_chat': # ... elif prompt_in == 'static_code_analysis': # ... elif prompt_in == 'vuln_analysis': # ... elif prompt_in == 'contact_dev': # ... elif prompt_in == 'help_menu': # ... else: # ...

    ループ内で、ユーザー入力がさまざまなコマンド キーワードに対してチェックされます。入力に応じて、コードは対応するアクションを実行します。たとえば、ユーザーが「quit_bot」と入力すると、 quit()関数が呼び出されてプログラムを終了します。ユーザーが「clear_screen」と入力すると、 clearscr()関数はコンソール画面をクリアします。同様のロジックが他のコマンドにも適用されます。


  • AI 応答の生成:

     else: prompt = prompt_in print(Print_AI_out(prompt)) pass

    ユーザー入力が事前定義されたコマンドのいずれにも一致しない場合、それは AI のプロンプトとして扱われます。入力はprompt変数とPrint_AI_out(prompt)に割り当てられ、指定されたプロンプトに基づいて AI 応答を生成するために関数が呼び出されます。 AI が生成した応答はコンソールに出力されます。


  • チャット履歴の保存:

     def save_chat(chat_history: list[Any, Any]) -> None: f = open('chat_history.json', 'w+') f.write(json.dumps(chat_history)) f.close

    save_chat関数は、ユーザー プロンプトと AI が生成した応答の両方を含む会話履歴を、「chat_history.json」という名前の JSON ファイルに保存する役割を果たします。この関数は、 chat_historyリストのデータを JSON 形式にシリアル化し、ファイルに書き込みます。


  • 脆弱性分析と静的コード分析:

     elif prompt_in == 'static_code_analysis': print(Markdown('----------')) language_used = Prompt.ask('Language Used> ') file_path = Prompt.ask('File Path> ') print(Markdown('----------')) print(static_analysis(language_used, file_path)) pass elif prompt_in == 'vuln_analysis': print(Markdown('----------')) scan_type = Prompt.ask('Scan Type > ') file_path = Prompt.ask('File Path > ') print(Markdown('----------')) print(vuln_analysis(scan_type, file_path)) pass

    これらのセクションでは、静的コード分析と脆弱性分析を実行するためのユーザー コマンドを処理します。ユーザーは、使用する言語やスキャンの種類、ファイル パスなどの情報を入力するように求められます。次に、提供されたデータを使用して、対応する分析関数 ( static_analysisまたはvuln_analysis ) が呼び出され、AI が分析結果を含む応答を生成します。


  • 脆弱性分析: vuln_analysisセクションでは、次のコードがユーザーに入力を求めます。

     scan_type = Prompt.ask('Scan Type > ') file_path = Prompt.ask('File Path > ')


    ここでは、 Prompt.ask関数を使用して、ユーザーに対話的に情報を尋ねます。ユーザーは、スキャンの種類と、分析する必要があるデータのファイル パスを入力するように求められます。これらの入力は脆弱性分析に不可欠です。ユーザーがこれらの入力を行うと、ユーザーの入力を組み込んだプロンプトを使用して分析が開始されます。

     prompt = f""" **Objective:** You are a Universal Vulnerability Analyzer powered by the Llama2 model. Your main objective is to analyze any provided scan data or log data to identify potential vulnerabilities in the target system or network. You can use the scan type or the scanner type to prepare a better report. **Instructions:** # ... (rest of the instructions) **Input Data:** You will receive the scan file data or log file data in the required format as input. Ensure the data is correctly parsed and interpreted for analysis. **Output Format:** The vulnerability analysis report should be organized as mentioned in the "Comprehensive Report" section. Please perform the vulnerability analysis efficiently, considering the security implications and accuracy, and generate a detailed report that helps users understand the potential risks and take appropriate actions. --- Provide the scan type: {scan_type} Provide the scan data or log data that needs to be analyzed: {file_data} """


    このプロンプトでは、 {scan_type}および{file_data}プレースホルダーは、ユーザーが入力した実際の値に置き換えられます。この動的プロンプトは、提供されたスキャン タイプとファイル データに基づいて分析結果を提供する AI 応答を生成するために LLama2 モデルに渡されます。


  • 静的コード分析:同様に、 static_code_analysisセクションで、コードはユーザーに入力を求めます。

     language_used = Prompt.ask('Language Used> ') file_path = Prompt.ask('File Path> ')


    ユーザーは、使用するプログラミング言語と、分析する必要があるコードのファイル パスを指定するように求められます。これらの入力は、静的コード分析を実行するために重要です。脆弱性分析セクションと同様に、ユーザーの入力を組み込んだプロンプトが LLama2 モデル用に構築されます。

     prompt = f""" **Objective:** Analyze the given programming file details to identify and report bugs, vulnerabilities, and syntax errors. Additionally, search for potential exposure of sensitive information such as API keys, passwords, and usernames. **File Details:** - Programming Language: {language_used} - File Name: {file_path} - File Data: {file_data} """


    ここで、 {language_used}{file_path}のプレースホルダーは、ユーザーが指定した実際の値に置き換えられます。この動的プロンプトは、ユーザーが入力したプログラミング言語とファイル データに基づいて分析結果を提示する AI 応答を生成するために使用されます。


    どちらの場合も、動的プロンプトを使用することで、LLama2 が生成する応答がコンテキストに関連し、ユーザーが要求した特定の分析に合わせて調整されることが保証されます。


  • 連絡先情報とヘルプメニュー:

     elif prompt_in == 'contact_dev': console.print(Panel( Align.center( Group(Align.center(Markdown(contact_dev))), vertical="middle", ), title= "Dev Contact", border_style="red" ), style="bold green" ) pass elif prompt_in == 'help_menu': console.print(Panel( Align.center( Group(Align.center(Markdown(help_menu))), vertical="middle", ), title= "Help Menu", border_style="red" ), style="bold green" ) pass


    これらのセクションでは、開発者の連絡先情報を表示するコマンド ( contact_dev ) と、使用可能なコマンドをリストするヘルプ メニュー ( help_menu ) を処理します。ユーザーがこれらのコマンドを入力すると、対応する情報がリッチ ライブラリを使用して適切にフォーマットされたパネルに表示されます。


  • メイン関数の実行:

     if __name__ == "__main__": main()

    チャット対話全体と処理ロジックを含むmain関数は、スクリプトが直接実行される (モジュールとしてインポートされない) 場合にのみ実行されます。この行により、スクリプトの実行時にチャットボットのコア機能が確実に実行されます。


私の Github リポジトリからチャットボット全体を表示して試すことができます:リンク

モデルをトレーニングするにはどうすればよいですか?

AI モデルのトレーニングは、計画と精度が必要な変革プロセスです。ここでは、プロセスを完了するためのステップバイステップのガイドを示します。


前提条件:

  • Tensor Power:かなりの Tensor 処理能力を備えた強力なシステムが成功への準備を整えます。 AI モデルのトレーニングに必要な処理能力を機器が処理できることを確認してください。


  • データセット: AI トレーニング形式に対応するデータセットは、モデルの学習曲線を加速します。効果的なトレーニングは高品質のデータに依存し、それがモデルの精度と能力に影響します。


  • Autotrain Advanced : 人工知能に関するこの重要なトレーニング リソースにアクセスできるようにします。このプログラムによってトレーニング手順が合理化され、重要な手順が自動化され、生産性が向上します。


トレーニングのプロセス:

  • データの準備:正確さと均一性を確保するには、データセットを整理して前処理します。最良のトレーニング結果を得るには、クリーンで整理されたデータを用意することが重要です。


  • モデルの初期化:開始点として使用する最適な事前トレーニング済みモデルを選択します。収束が加速され、トレーニング プロセスがすぐに開始されます。


  • 微調整:学習率、バッチ サイズ、オプティマイザー設定などのハイパーパラメーターを調整してパラメーターを微調整します。モデルのパフォーマンスと収束速度のバランスをとるには、これらのパラメーターを調整します。


  • トレーニングの反復:モデルを通じてデータセットを数回 (エポック) 実行して、トレーニングを開始します。モデルは反復するたびに理解度が向上し、予測の傾向が向上します。


  • 検証とテスト:独自の検証データセットを利用して、モデルの開発を継続的に検証します。モデルの一般化能力は、新しいデータに対するテストを通じて評価されます。


  • 分析とモニタリング:トレーニング指標に細心の注意を払ってください。損失曲線、精度傾向、その他の指標などの指標は、モデルの開発に関する情報を提供します。


  • 最適化と微調整:監視結果に基づいてハイパーパラメータを戦略的に調整します。望ましいパフォーマンスを得るには、モデルを繰り返し改良します。


  • 評価と展開:最終モデルのテスト データセット評価を徹底的に実施します。結果に満足したら、トレーニングされたモデルを実際のアプリケーションで使用してください。


データセット:

データセットは、利用可能なテキスト生成固有のデータセットの下で、huggingface データセットで利用できるものと同様に、事前に構築されたデータセットの両方にすることができます。カスタム データセットの場合は、次の手順に従ってください。


  • データセットには少なくとも 3 つの列が含まれている必要があります。
  • 最初の列は名前である必要があり、2 番目の列は説明、3 番目と最後の列はリクエストと AI 応答のプロンプトになります。


使用できるサンプル データセット形式は次のとおりです: data.csv

名前

説明

プロンプト

挨拶

基本的な挨拶と返事

###人間: こんにちは。

###アナリスト: こんにちは!

天気

天気について尋ねる

###人間: 今日の天気はどうですか

###アナリスト: 晴れていて暖かいですね。

レストラン

おすすめのレストランについて問い合わせる

###人間: 良いレストランを教えてください。

###アナリスト: もちろんです!試してみることをお勧めします...

テクノロジー

最新の技術トレンドについて話し合う

###HUMAN: 今年のテクノロジートレンドは何ですか

###アナリスト: AI とブロックチェーンは顕著なトレンドです...

旅行

旅行に関するアドバイスやヒントを求める

###HUMAN: パリを訪れる際の旅行のヒント

###アナリスト: その通りです!パリにいるとき...

こちらは1種類のみです。


データセットを取得したら、GPU パワーの量とデータセットのサイズに基づいて AI をトレーニングします。時間もそれに応じて対応します。これで、huggingface の自動トレーニング高度なモジュールを使用して AI をトレーニングできるようになりました。


次のコマンドを使用して autotrain-advanced をインストールできます。

 pip install autotrain-advanced


AI をトレーニングするための次のコマンド:

 autotrain llm --train --project_name your_project_name --model TinyPixel/Llama-2-7B-bf16-sharded --data_path your_data_set --use_peft --use_int4 --learning_rate 2e-4 --train_batch_size 2 --num_train_epochs 3 --trainer sft --model_max_length 2048 --push_to_hub --repo_id your_repo_id -


project_nameyour_project_nameから実際のプロジェクト名に、モデルをTinyPixel/Llama-2-7B-bf16-shardedからトレーニングしたいラマ モデルに、 data_pathを に変更できます.カスタム データセットまたはhuggingface/datasetの場合は、データセットのリポジトリID(huggingfaceからのものの場合)。


私は、Llama モデルまたは手に入る LLM モデルをトレーニングして、ハッカーとしてのタスクの大部分を自動化できる完全なサイバーセキュリティ アシスタントになることを目指しています。これは、あれば幸いです。

機能と利点

それで、機能について話します。Meta は、いくつかのベンチマークを含む Llama の研究論文をリリースしました。論文によると、Llama モデルのパラメータは 7B から 65B であり、他の大規模な言語モデルと比較して優れたパフォーマンスを備えています。たとえば、Llama-13B は 10 倍小さいにもかかわらず、ほとんどのベンチマークで GPT-3 を上回ります。 Llama の 65B パラメータ モデルは、Chinchilla や PaLM-540B などの他の大規模言語モデルとも競合します。論文では、小規模なモデルをより長くトレーニングすると、最終的には推論のコストが安くなる可能性があるとも述べています。 7B モデルのパフォーマンスは 1T トークン後も向上し続けると記載されています。ただし、この文書には Llama モデル間のパフォーマンスの違いに関する具体的な数値は記載されていません。


他の情報源によると、Llama モデルは GPT モデルや PaLM モデルと比べて多用途かつ高速であり、使用するのに最適な AI モデルの 1 つであると主張しています。しかし、ハッキングやセキュリティ固有のタスクの場合、これには多くのトレーニングや個人的な入力が必要です。そのトレーニング モデルを生成するのは簡単ではありませんが、一度トレーニングされれば、これは大きな変革をもたらす可能性があります。

最終基調講演

  • 比類のない効率: AI により、以前は数時間かかっていたプロセスが数秒で完了するようになり、生産性が向上し、重要な時間が解放されました。
  • 意思決定の向上: AI を活用した分析は、データに基づいたインテリジェントな意思決定を提供し、さまざまな分野にわたって精度と先見性を高めます。
  • パーソナライズされたエクスペリエンス: AI は、パーソナライズされた提案から適応学習用のプラットフォームまで、個人の好みに合わせたエクスペリエンスを作成します。
  • 単調な業務の自動化: AI のシームレスな統合により、より革新的で戦略的なプロジェクトに時間を費やすことができます。
  • 革新的なソリューション: AI は医療、環境、その他の分野での革新を促進し、複雑な問題により効果的に取り組みます。


人工知能の世界への旅は信じられないほど啓発的であり、自動化と統合の驚くべき影響を実証しています。さまざまな業界での AI の機能を見て、私は AI が私たちの働き方や交流の仕方をどのように変えているかについて深く感謝しています。通常業務のシームレスな自動化の観察から日常生活への AI の組み込みの体験まで、私の学習経験は啓示でした。 AI の複雑さを学ぶにつれて、自動化と統合が単なる技術的なアイデアではないことがわかりました。むしろ、それらはイノベーションの触媒として機能します。この新たに得た洞察により、効率とコラボレーションを向上させる AI の可能性が無限である世界が見えてきました。

情報源

連絡先

LinkedIn経由で私にご連絡いただけます。ご不明な点がございましたら、以下にコメントしてください。

読んでくれてありがとう。