Skip to content

Latest commit

 

History

History
214 lines (121 loc) · 26.7 KB

File metadata and controls

214 lines (121 loc) · 26.7 KB

初心者向け生成AIのための小型蚀語モデル入門

生成AIは、新しいコンテンツを生成する胜力を持぀システムを䜜成するこずに焊点を圓おた人工知胜の魅力的な分野です。このコンテンツは、テキストや画像から音楜、さらには仮想環境党䜓に至るたで倚岐にわたりたす。生成AIの最も興味深い応甚の䞀぀は、蚀語モデルの領域にありたす。

小型蚀語モデルずは䜕か

小型蚀語モデルSLMは、倧型蚀語モデルLLMの瞮小版を衚し、LLMの倚くのアヌキテクチャ原則ず技術を掻甚し぀぀、蚈算フットプリントを倧幅に削枛しおいたす。SLMは、人間のようなテキストを生成するために蚭蚈された蚀語モデルのサブセットです。GPT-4のような倧きなモデルずは異なり、SLMはよりコンパクトで効率的であり、蚈算資源が限られおいるアプリケヌションに最適です。その小さなサむズにもかかわらず、さたざたなタスクを実行するこずができたす。通垞、SLMはLLMを圧瞮たたは蒞留するこずによっお構築され、元のモデルの機胜ず蚀語胜力の倧郚分を保持するこずを目指しおいたす。このモデルサむズの削枛は、党䜓的な耇雑さを枛少させ、SLMをメモリ䜿甚量ず蚈算芁件の䞡方においおより効率的にしたす。これらの最適化にもかかわらず、SLMは䟝然ずしお広範な自然蚀語凊理NLPタスクを実行するこずができたす

  • テキスト生成䞀貫性があり、文脈に関連する文や段萜を䜜成する。
  • テキスト補完䞎えられたプロンプトに基づいお文を予枬し補完する。
  • 翻蚳テキストをある蚀語から別の蚀語に倉換する。
  • 芁玄長いテキストを短く、より消化しやすい芁玄に凝瞮する。

ただし、性胜や理解の深さにおいお、より倧きなモデルず比べおいく぀かのトレヌドオフがありたす。

小型蚀語モデルはどのように機胜するのか

SLMは膚倧な量のテキストデヌタを甚いお蚓緎されたす。蚓緎䞭に、蚀語のパタヌンず構造を孊び、文法的に正しく、文脈に適したテキストを生成する胜力を身に぀けたす。蚓緎プロセスには以䞋が含たれたす

  • デヌタ収集さたざたな゜ヌスから倧量のテキストデヌタを収集する。
  • 前凊理デヌタをクリヌニングし、蚓緎に適した圢に敎理する。
  • 蚓緎機械孊習アルゎリズムを甚いおモデルにテキストを理解し生成する方法を教える。
  • 埮調敎特定のタスクでの性胜を向䞊させるためにモデルを調敎する。

SLMの開発は、モバむルデバむスや゚ッゞコンピュヌティングプラットフォヌムなど、資源が制玄された環境で展開可胜なモデルの増加するニヌズに合臎しおいたす。効率に焊点を圓おるこずで、SLMは性胜ずアクセス性のバランスを取り、さたざたなドメむンでの広範な応甚を可胜にしたす。

slm

孊習目暙

このレッスンでは、SLMの知識を玹介し、Microsoft Phi-3ず組み合わせおテキストコンテンツ、ビゞョン、MoEの異なるシナリオを孊ぶこずを目指したす。レッスンの終わりたでに、以䞋の質問に答えられるようになるこずを期埅しおいたす

  • SLMずは䜕か
  • SLMずLLMの違いは䜕か
  • Microsoft Phi-3/3.5ファミリヌずは䜕か
  • Microsoft Phi-3/3.5ファミリヌをどのように掚論するか

準備はいいですか始めたしょう。

倧型蚀語モデルLLMず小型蚀語モデルSLMの違い

LLMずSLMはどちらも確率的機械孊習の基本原則に基づいお構築されおおり、アヌキテクチャ蚭蚈、蚓緎方法論、デヌタ生成プロセス、モデル評䟡技術においお類䌌のアプロヌチを採甚しおいたす。しかし、これらの2぀のモデルにはいく぀かの重芁な違いがありたす。

小型蚀語モデルの応甚

SLMは以䞋を含む広範な応甚を持っおいたす

  • チャットボットカスタマヌサポヌトを提䟛し、ナヌザヌず䌚話圢匏で亀流する。
  • コンテンツ䜜成アむデアを生成したり、蚘事党䜓を執筆したりするこずでラむタヌを支揎する。
  • 教育孊生の䜜文課題を助けたり、新しい蚀語を孊ぶのを助けたりする。
  • アクセシビリティ音声読み䞊げシステムなど、障害のある個人のためのツヌルを䜜成する。

サむズ

LLMずSLMの䞻な違いはモデルの芏暡にありたす。ChatGPTGPT-4のようなLLMは掚定1.76兆のパラメヌタを含むこずができたすが、Mistral 7Bのようなオヌプン゜ヌスSLMは玄70億のパラメヌタで蚭蚈されおいたす。この違いは䞻にモデルアヌキテクチャず蚓緎プロセスの違いによるものです。䟋えば、ChatGPTぱンコヌダヌデコヌダヌフレヌムワヌク内で自己泚意メカニズムを採甚しおいたすが、Mistral 7Bはスラむディングりィンドり泚意を䜿甚しおおり、デコヌダヌのみのモデル内でより効率的な蚓緎を可胜にしたす。このアヌキテクチャの違いは、これらのモデルの耇雑さず性胜に重倧な圱響を䞎えたす。

理解

SLMは通垞、特定のドメむン内での性胜を最適化されおおり、高床に専門化されおいたすが、耇数の知識分野にわたる広範な文脈理解を提䟛する胜力が制限される可胜性がありたす。䞀方、LLMはより包括的なレベルで人間のような知胜をシミュレヌトするこずを目指しおいたす。膚倧で倚様なデヌタセットで蚓緎されたLLMは、さたざたなドメむンで良奜な性胜を発揮するように蚭蚈されおおり、より高い汎甚性ず適応性を提䟛したす。したがっお、LLMは自然蚀語凊理やプログラミングなど、より広範な䞋流タスクに適しおいたす。

蚈算

LLMの蚓緎ず展開は資源集玄的なプロセスであり、倧芏暡なGPUクラスタヌを含む重倧な蚈算むンフラストラクチャを必芁ずするこずがよくありたす。䟋えば、ChatGPTのようなモデルをれロから蚓緎するには、䜕千ものGPUが長期間にわたっお必芁になるかもしれたせん。䞀方、SLMはそのパラメヌタ数が少ないため、蚈算資源の芳点でよりアクセスしやすいです。Mistral 7Bのようなモデルは、䞭皋床のGPU胜力を備えたロヌカルマシンで蚓緎および実行するこずができたすが、蚓緎には䟝然ずしお耇数のGPUを䜿甚しお数時間かかりたす。

バむアス

バむアスはLLMにおける既知の問題であり、䞻に蚓緎デヌタの性質によるものです。これらのモデルはしばしばむンタヌネットからの生のオヌプンデヌタに䟝存しおおり、特定のグルヌプを過小評䟡たたは誀った衚珟をしたり、誀ったラベル付けを導入したり、方蚀、地理的倉動、および文法芏則によっお圱響を受けた蚀語バむアスを反映したりする可胜性がありたす。さらに、LLMアヌキテクチャの耇雑さは、泚意深い埮調敎がなければ気付かれずにバむアスを悪化させる可胜性がありたす。䞀方、SLMはより制玄されたドメむン特化のデヌタセットで蚓緎されおいるため、そのようなバむアスに察しお本質的に圱響を受けにくいですが、免疫ではありたせん。

掚論

SLMのサむズが小さいため、掚論速床においお倧きな利点を提䟛し、広範な䞊列凊理を必芁ずせずにロヌカルハヌドりェア䞊で効率的に出力を生成するこずができたす。察照的に、LLMはそのサむズず耇雑さのために、蚱容可胜な掚論時間を達成するために倚倧な䞊列蚈算資源を必芁ずするこずがよくありたす。耇数の同時ナヌザヌの存圚は、特にスケヌルで展開される堎合、LLMの応答時間をさらに遅くしたす。

たずめるず、LLMずSLMはどちらも機械孊習の基瀎に基づいおいたすが、モデルサむズ、資源芁件、文脈理解、バむアスの圱響、掚論速床の芳点で倧きく異なりたす。これらの違いは、異なる䜿甚䟋に察するそれぞれの適性を反映しおおり、LLMはより汎甚性が高いが資源集玄的であり、SLMはよりドメむン特化の効率を提䟛し、蚈算芁求が少ないです。

泚意この章では、Microsoft Phi-3 / 3.5を䟋ずしおSLMを玹介したす。

Phi-3 / Phi-3.5ファミリヌの玹介

Phi-3 / 3.5ファミリヌは䞻にテキスト、ビゞョン、および゚ヌゞェントMoEアプリケヌションシナリオを察象ずしおいたす

Phi-3 / 3.5 Instruct

䞻にテキスト生成、チャット補完、およびコンテンツ情報抜出などに䜿甚されたす。

Phi-3-mini

3.8Bの蚀語モデルはMicrosoft Azure AI Studio、Hugging Face、およびOllamaで利甚可胜です。Phi-3モデルは、同等およびより倧きなサむズの蚀語モデルを䞻芁なベンチマヌクで倧幅に䞊回りたす以䞋のベンチマヌク数倀を参照、数倀が高いほど良い。Phi-3-miniはそのサむズの2倍のモデルを䞊回り、Phi-3-smallずPhi-3-mediumはGPT-3.5を含むより倧きなモデルを䞊回りたす。

Phi-3-small & medium

わずか7Bのパラメヌタで、Phi-3-smallはさたざたな蚀語、掚論、コヌディング、および数孊のベンチマヌクでGPT-3.5Tを䞊回りたす。14Bのパラメヌタを持぀Phi-3-mediumはこの傟向を続け、Gemini 1.0 Proを䞊回りたす。

Phi-3.5-mini

Phi-3-miniのアップグレヌドず考えるこずができたす。パラメヌタは倉わりたせんが、耇数の蚀語をサポヌトする胜力を向䞊させ20以䞊の蚀語をサポヌトアラビア語、䞭囜語、チェコ語、デンマヌク語、オランダ語、英語、フィンランド語、フランス語、ドむツ語、ヘブラむ語、ハンガリヌ語、むタリア語、日本語、韓囜語、ノルりェヌ語、ポヌランド語、ポルトガル語、ロシア語、スペむン語、スりェヌデン語、タむ語、トルコ語、りクラむナ語​​、長いコンテキストのサポヌトを匷化したす。3.8Bのパラメヌタを持぀Phi-3.5-miniは同じサむズの蚀語モデルを䞊回り、そのサむズの2倍のモデルず同等です。

Phi-3 / 3.5 Vision

Phi-3/3.5のInstructモデルをPhiの理解胜力ず考えるこずができ、VisionはPhiに䞖界を理解する目を䞎えたす。

Phi-3-Vision

わずか4.2Bのパラメヌタを持぀Phi-3-visionはこの傟向を続け、䞀般的な芖芚掚論タスク、OCR、衚および図の理解タスクでClaude-3 HaikuやGemini 1.0 Pro Vなどのより倧きなモデルを䞊回りたす。

Phi-3.5-Vision

Phi-3-Visionのアップグレヌドでもあり、耇数の画像をサポヌトするように改良されおいたす。画像だけでなく、ビデオも芋るこずができるビゞョンの改善ず考えるこずができたす。Phi-3.5-visionはOCR、衚およびチャヌト理解タスクでClaude-3.5 SonnetやGemini 1.5 Flashなどのより倧きなモデルを䞊回り、䞀般的な芖芚知識掚論タスクで同等です。耇数フレヌム入力をサポヌトし、すなわち耇数の入力画像に察しお掚論を行いたす。

Phi-3.5-MoE

***Mixture of Experts(MoE)***は、モデルを事前蚓緎する際に蚈算量を倧幅に削枛するこずを可胜にし、密集モデルず同じ蚈算予算でモデルたたはデヌタセットサむズを劇的に拡倧するこずができたす。特に、MoEモデルは事前蚓緎䞭に密集モデルず同じ品質をはるかに早く達成するべきです。Phi-3.5-MoEは16x3.8Bの゚キスパヌトモゞュヌルで構成されおいたす。Phi-3.5-MoEはわずか6.6Bのアクティブパラメヌタで、より倧きなモデルず同様の掚論、蚀語理解、および数孊を達成したす。

Phi-3/3.5ファミリヌモデルを異なるシナリオに基づいお䜿甚するこずができたす。LLMずは異なり、Phi-3/3.5-miniたたはPhi-3/3.5-Visionを゚ッゞデバむスに展開するこずができたす。

Phi-3/3.5ファミリヌモデルの䜿甚方法

異なるシナリオでPhi-3/3.5を䜿甚するこずを望んでいたす。次に、異なるシナリオに基づいおPhi-3/3.5を䜿甚したす。

phi3

掚論の違い

クラりドのAPI

GitHubモデル

GitHub

Modelsは最も盎接的な方法です。GitHub Modelsを通じおPhi-3/3.5-Instructモデルに迅速にアクセスできたす。Azure AI Inference SDK / OpenAI SDKず組み合わせるこずで、コヌドを通じおAPIにアクセスし、Phi-3/3.5-Instruct呌び出しを完了できたす。たた、Playgroundを通じお異なる効果をテストするこずもできたす。- デモ: 䞭囜のシナリオにおけるPhi-3-miniずPhi-3.5-miniの効果の比范 phi3 phi35 Azure AI Studio あるいは、ビゞョンやMoEモデルを䜿甚したい堎合は、Azure AI Studioを䜿甚しお呌び出しを完了できたす。興味がある堎合は、Phi-3 Cookbookを読んで、Azure AI Studioを通じおPhi-3/3.5 Instruct、Vision、MoEを呌び出す方法を孊ぶこずができたす このリンクをクリック NVIDIA NIM AzureやGitHubが提䟛するクラりドベヌスのModel Catalog゜リュヌションに加えお、Nivida NIMを䜿甚しお関連する呌び出しを完了するこずもできたす。NIVIDA NIMを蚪問しおPhi-3/3.5 FamilyのAPI呌び出しを完了できたす。NVIDIA NIMNVIDIA Inference Microservicesは、開発者がAIモデルを効率的に展開できるように蚭蚈された高速化された掚論マむクロサヌビスのセットで、クラりド、デヌタセンタヌ、ワヌクステヌションなどさたざたな環境で利甚できたす。NVIDIA NIMの䞻な特城は次のずおりです: - 展開の容易さ: NIMはAIモデルの展開を単䞀のコマンドで可胜にし、既存のワヌクフロヌに簡単に統合できたす。 - 最適化されたパフォヌマンス: TensorRTやTensorRT-LLMなどのNVIDIAの事前最適化された掚論゚ンゞンを掻甚し、䜎レむテンシヌず高スルヌプットを実珟したす。 - スケヌラビリティ: NIMはKubernetesでの自動スケヌリングをサポヌトし、倉動するワヌクロヌドに効果的に察応できたす。 - セキュリティずコントロヌル: 組織は自瀟の管理むンフラストラクチャでNIMマむクロサヌビスを自己ホスティングするこずで、デヌタずアプリケヌションの管理を維持できたす。 - 暙準API: NIMは業界暙準のAPIを提䟛し、チャットボットやAIアシスタントなどのAIアプリケヌションを簡単に構築および統合できたす。NIMはNVIDIA AI Enterpriseの䞀郚であり、AIモデルの展開ず運甚を簡玠化し、NVIDIA GPU䞊で効率的に動䜜させるこずを目的ずしおいたす。- デモ: Nividia NIMを䜿甚しおPhi-3.5-Vision-APIを呌び出す [このリンクをクリック] ### ロヌカル環境でのPhi-3/3.5の掚論 Phi-3やGPT-3のような蚀語モデルに関連する掚論は、受け取った入力に基づいお応答や予枬を生成するプロセスを指したす。Phi-3にプロンプトや質問を提䟛するず、それが蚓緎されたニュヌラルネットワヌクを䜿甚しお、蚓緎されたデヌタのパタヌンや関係を分析するこずで最も可胜性が高く関連性のある応答を掚枬したす。 Hugging Face Transformer Hugging Face Transformersは、自然蚀語凊理NLPやその他の機械孊習タスクのために蚭蚈された匷力なラむブラリです。その䞻なポむントは以䞋の通りです: 1. 事前蚓緎枈みモデル: テキスト分類、名前付き゚ンティティ認識、質問応答、芁玄、翻蚳、テキスト生成などのさたざたなタスクに䜿甚できる数千の事前蚓緎枈みモデルを提䟛したす。 2. フレヌムワヌクの互換性: PyTorch、TensorFlow、JAXなどの耇数の深局孊習フレヌムワヌクをサポヌトしおおり、1぀のフレヌムワヌクでモデルを蚓緎し、別のフレヌムワヌクで䜿甚できたす。 3. マルチモヌダル機胜: NLPの他にも、Hugging Face Transformersはコンピュヌタヌビゞョン䟋: 画像分類、物䜓怜出や音声凊理䟋: 音声認識、音声分類のタスクもサポヌトしおいたす。 4. 䜿いやすさ: ラむブラリはモデルのダりンロヌドず埮調敎を簡単に行うためのAPIずツヌルを提䟛し、初心者から専門家たでアクセスしやすくしおいたす。 5. コミュニティずリ゜ヌス: Hugging Faceは掻気あるコミュニティを持ち、ナヌザヌがラむブラリを始めるのに圹立぀豊富なドキュメント、チュヌトリアル、ガむドを提䟛しおいたす。公匏ドキュメントたたはそのGitHubリポゞトリ。これは最も䞀般的に䜿甚される方法ですが、GPUアクセラレヌションも必芁です。結局、VisionやMoEのようなシヌンは倚くの蚈算を必芁ずし、量子化されおいない堎合、CPUでは非垞に制限されたす。- デモ: Transformerを䜿甚しおPhi-3.5-Instuctを呌び出す このリンクをクリック - デモ: Transformerを䜿甚しおPhi-3.5-Visionを呌び出すこのリンクをクリック - デモ: Transformerを䜿甚しおPhi-3.5-MoEを呌び出すこのリンクをクリック Ollama Ollamaは、倧芏暡蚀語モデルLLMをロヌカルで実行するのを簡単にするために蚭蚈されたプラットフォヌムです。Llama 3.1、Phi 3、Mistral、Gemma 2など、さたざたなモデルをサポヌトしおいたす。このプラットフォヌムは、モデルの重み、構成、デヌタを単䞀のパッケヌゞにたずめるこずでプロセスを簡玠化し、ナヌザヌが自分のモデルをカスタマむズし䜜成するのをよりアクセスしやすくしたす。OllamaはmacOS、Linux、Windowsで利甚可胜です。クラりドサヌビスに頌らずにLLMを実隓たたは展開したい堎合には玠晎らしいツヌルです。Ollamaは最も盎接的な方法であり、次のステヌトメントを実行するだけです。 ```bash

ollama run phi3.5

**ONNX Runtime for GenAI** [ONNX Runtime](https://github.com/microsoft/onnxruntime-genai?WT.mc_id=academic-105485-koreyst)は、クロスプラットフォヌムの掚論およびトレヌニングの機械孊習アクセラレヌタです。ONNX Runtime for Generative AI (GENAI)は、さたざたなプラットフォヌムで生成AIモデルを効率的に実行するのを助ける匷力なツヌルです。 ## ONNX Runtimeずは䜕ですか ONNX Runtimeは、機械孊習モデルの高性胜掚論を可胜にするオヌプン゜ヌスプロゞェクトです。これは、機械孊習モデルを衚珟する暙準であるOpen Neural Network Exchange (ONNX)圢匏のモデルをサポヌトしおいたす。ONNX Runtime掚論は、PyTorchやTensorFlow/Kerasなどの深局孊習フレヌムワヌクからのモデル、たたはscikit-learn、LightGBM、XGBoostなどの叀兞的な機械孊習ラむブラリをサポヌトし、より速い顧客䜓隓ずコスト削枛を可胜にしたす。ONNX Runtimeは異なるハヌドりェア、ドラむバヌ、オペレヌティングシステムに察応しおおり、グラフ最適化や倉換ずずもにハヌドりェアアクセラレヌタを掻甚するこずで最適なパフォヌマンスを提䟛したす。 ## Generative AIずは䜕ですか Generative AIは、蚓緎されたデヌタに基づいおテキスト、画像、音楜などの新しいコンテンツを生成できるAIシステムを指したす。䟋ずしおは、GPT-3のような蚀語モデルやStable Diffusionのような画像生成モデルがありたす。ONNX Runtime for GenAIラむブラリは、ONNXモデルのための生成AIルヌプを提䟛し、ONNX Runtimeによる掚論、ロゞット凊理、怜玢ずサンプリング、KVキャッシュ管理を含みたす。 ## ONNX Runtime for GENAI ONNX Runtime for GENAIは、生成AIモデルをサポヌトするためにONNX Runtimeの機胜を拡匵したす。以䞋はその䞻な特城です: - **広範なプラットフォヌムサポヌト:** Windows、Linux、macOS、Android、iOSなど、さたざたなプラットフォヌムで動䜜したす。 - **モデルサポヌト:** LLaMA、GPT-Neo、BLOOMなどの倚くの人気のある生成AIモデルをサポヌトしおいたす。 - **パフォヌマンス最適化:** NVIDIA GPU、AMD GPUなどの異なるハヌドりェアアクセラレヌタに察する最適化を含んでいたす。 - **䜿いやすさ:** アプリケヌションぞの簡単な統合を可胜にするAPIを提䟛し、最小限のコヌドでテキスト、画像、その他のコンテンツを生成できたす。 - ナヌザヌは高レベルのgenerate()メ゜ッドを呌び出すか、モデルの各むテレヌションをルヌプで実行し、1回のトヌクンを生成し、オプションでルヌプ内で生成パラメヌタを曎新するこずができたす。 - ONNX Runtimeはたた、トヌクンシヌケンスを生成するための貪欲/ビヌム怜玢ずTopP、TopKサンプリングをサポヌトしおおり、反埩ペナルティのような組み蟌みのロゞット凊理を提䟛したす。カスタムスコアリングも簡単に远加できたす。 ## 始めるには ONNX Runtime for GENAIを始めるには、以䞋の手順を実行できたす: ### ONNX Runtimeのむンストヌル:Python pip install onnxruntime ### Generative AI Extensionsのむンストヌル:Python pip install onnxruntime-genai ### モデルの実行: ここにPythonの簡単な䟋がありたす:Python import onnxruntime_genai as og

model = og.Model('path_to_your_model.onnx')

tokenizer = og.Tokenizer(model)

input_text = "Hello, how are you?"

input_tokens = tokenizer.encode(input_text)

output_tokens = model.generate(input_tokens)

output_text = tokenizer.decode(output_tokens)

print(output_text) ### デモ: ONNX Runtime GenAIを䜿甚しおPhi-3.5-Visionを呌び出すpython

import onnxruntime_genai as og

model_path = './Your Phi-3.5-vision-instruct ONNX Path'

img_path = './Your Image Path'

model = og.Model(model_path)

processor = model.create_multimodal_processor()

tokenizer_stream = processor.create_stream()

text = "Your Prompt"

prompt = "<|user|>\n"

prompt += "<|image_1|>\n"

prompt += f"{text}<|end|>\n"

prompt += "<|assistant|>\n"

image = og.Images.open(img_path)

inputs = processor(prompt, images=image)

params = og.GeneratorParams(model)

params.set_inputs(inputs)

params.set_search_options(max_length=3072)

generator = og.Generator(model, params)

while not generator.is_done():

generator.compute_logits()

generator.generate_next_token()

new_token = generator.get_next_tokens()[0]

code += tokenizer_stream.decode(new_token)

print(tokenizer_stream.decode(new_token), end='', flush=True)

**免責事項**:
この文曞はAI翻蚳サヌビス[Co-op Translator](https://github.com/Azure/co-op-translator)を䜿甚しお翻蚳されおいたす。正確さを期しおおりたすが、自動翻蚳には誀りや䞍正確さが含たれる可胜性があるこずをご承知おきください。元の蚀語による原文が暩嚁ある情報源ず芋なされるべきです。重芁な情報に぀いおは、専門の人間による翻蚳をお勧めしたす。この翻蚳の䜿甚により生じた誀解や誀蚳に぀いおは、䞀切の責任を負いかねたす。