Skip to content

Latest commit

 

History

History
177 lines (110 loc) · 7.89 KB

File metadata and controls

177 lines (110 loc) · 7.89 KB

ラボ 2 - AIPCでPhi-3-miniを使ったPrompt flowの実行

Prompt flowとは

Prompt flowは、LLMベースのAIアプリケーションのアイデア出し、プロトタイピング、テスト、評価から本番展開や監視までの一連の開発サイクルを効率化するための開発ツール群です。プロンプトエンジニアリングを格段に簡単にし、実用レベルのLLMアプリを構築できるようにします。

Prompt flowを使うと、以下が可能になります:

  • LLM、プロンプト、Pythonコード、その他のツールを連携させた実行可能なワークフローを作成する。

  • 特にLLMとのやり取りを含むフローのデバッグや反復を簡単に行う。

  • 大規模データセットを使ってフローの評価や品質・性能指標の計算を行う。

  • テストと評価をCI/CDシステムに統合し、フローの品質を保証する。

  • 選択したサービングプラットフォームにフローを展開したり、アプリのコードベースに簡単に組み込む。

  • (任意だが強く推奨)Azure AIのクラウド版Prompt flowを活用してチームでの共同作業を行う。

AIPCとは

AI PCはCPU、GPU、NPUを搭載しており、それぞれ特定のAIアクセラレーション機能を持っています。NPU(ニューラルプロセッシングユニット)は、AIや機械学習(ML)タスクをクラウドに送信せずにPC上で直接処理するための専用アクセラレータです。GPUやCPUもこれらの処理を行えますが、NPUは特に低消費電力のAI計算に優れています。AI PCは、コンピュータの使い方における根本的な変化を示しています。これは従来存在しなかった問題の解決策ではなく、日常的なPC利用における大幅な改善を約束するものです。

では、どのように動作するのでしょうか?大量の公開データで訓練された巨大な大規模言語モデル(LLM)や生成AIと比べて、PC上で動作するAIはほぼすべての面でより身近なものになります。コンセプトも理解しやすく、クラウドにアクセスする必要がなく自分のデータで訓練されているため、より幅広いユーザーにとって即効性のあるメリットがあります。

近い将来、AI PCの世界では、個人アシスタントや小規模なAIモデルがPC上で直接動作し、あなたのデータを使って、会議の議事録作成、ファンタジーフットボールリーグの管理、写真や動画編集の自動補正、家族の集まりのための最適な旅程作成など、日常的に行う作業をより個人的でプライベートかつ安全に強化します。

AIPCでの生成コードフローの構築

注記 :環境構築がまだの場合は、Lab 0 -Installationsをご覧ください。

  1. Visual Studio CodeでPrompt flow拡張機能を開き、空のフロープロジェクトを作成します。

create

  1. 入力と出力のパラメータを追加し、新しいフローとしてPythonコードを追加します。

flow

この構造(flow.dag.yaml)を参考にフローを構築できます。

inputs:
  question:
    type: string
    default: how to write Bubble Algorithm
outputs:
  answer:
    type: string
    reference: ${Chat_With_Phi3.output}
nodes:
- name: Chat_With_Phi3
  type: python
  source:
    type: code
    path: Chat_With_Phi3.py
  inputs:
    question: ${inputs.question}

  1. Chat_With_Phi3.pyにコードを追加します。
from promptflow.core import tool

# import torch
from transformers import AutoTokenizer, pipeline,TextStreamer
import intel_npu_acceleration_library as npu_lib

import warnings

import asyncio
import platform

class Phi3CodeAgent:
    
    model = None
    tokenizer = None
    text_streamer = None
    
    model_id = "microsoft/Phi-3-mini-4k-instruct"

    @staticmethod
    def init_phi3():
        
        if Phi3CodeAgent.model is None or Phi3CodeAgent.tokenizer is None or Phi3CodeAgent.text_streamer is None:
            Phi3CodeAgent.model = npu_lib.NPUModelForCausalLM.from_pretrained(
                                    Phi3CodeAgent.model_id,
                                    torch_dtype="auto",
                                    dtype=npu_lib.int4,
                                    trust_remote_code=True
                                )
            Phi3CodeAgent.tokenizer = AutoTokenizer.from_pretrained(Phi3CodeAgent.model_id)
            Phi3CodeAgent.text_streamer = TextStreamer(Phi3CodeAgent.tokenizer, skip_prompt=True)

    

    @staticmethod
    def chat_with_phi3(prompt):
        
        Phi3CodeAgent.init_phi3()

        messages = "<|system|>You are a AI Python coding assistant. Please help me to generate code in Python.The answer only genertated Python code, but any comments and instructions do not need to be generated<|end|><|user|>" + prompt +"<|end|><|assistant|>"



        generation_args = {
            "max_new_tokens": 1024,
            "return_full_text": False,
            "temperature": 0.3,
            "do_sample": False,
            "streamer": Phi3CodeAgent.text_streamer,
        }

        pipe = pipeline(
            "text-generation",
            model=Phi3CodeAgent.model,
            tokenizer=Phi3CodeAgent.tokenizer,
            # **generation_args
        )

        result = ''

        with warnings.catch_warnings():
            warnings.simplefilter("ignore")
            response = pipe(messages, **generation_args)
            result =response[0]['generated_text']
            return result


@tool
def my_python_tool(question: str) -> str:
    if platform.system() == 'Windows':
        asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
    return Phi3CodeAgent.chat_with_phi3(question)
  1. デバッグまたは実行からフローをテストし、生成コードが正しく動作するか確認します。

RUN

  1. ターミナルで開発用APIとしてフローを実行します。

pf flow serve --source ./ --port 8080 --host localhost   

PostmanやThunder Clientでテスト可能です。

注記

  1. 初回実行は時間がかかります。Hugging face CLIからphi-3モデルをダウンロードすることを推奨します。

  2. Intel NPUの計算能力が限られているため、Phi-3-mini-4k-instructの使用を推奨します。

  3. Intel NPUアクセラレーションでINT4量子化変換を行っていますが、サービスを再実行する場合はキャッシュとnc_workshopフォルダを削除する必要があります。

リソース

  1. Promptflowの学習 https://microsoft.github.io/promptflow/

  2. Intel NPU Accelerationの学習 https://github.com/intel/intel-npu-acceleration-library

  3. サンプルコードのダウンロード Local NPU Agent Sample Code

免責事項
本書類はAI翻訳サービス「Co-op Translator」を使用して翻訳されました。正確性の向上に努めておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があります。原文の言語によるオリジナル文書が正式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。本翻訳の利用により生じたいかなる誤解や誤訳についても、当方は責任を負いかねます。