OSSのLLMをいろいろ検証してみた!

OSSのLLMをいろいろ検証してみた!

はじめに

昨年2023年の年明けぐらいから YoutubeなどでもChatGPT関連の動画が多く気になっていたところ、社内でもプロンプトエンジニアを個人で始めている方がちらほら出てきて、これはビックウェーブになりそうだなという雰囲気でした。

その後、GPT以外のOSSのLLMもいろいろな方の検証のブログや記事が出てきたため、利用方法やファインチューニングの方法、LangChainなどライブラリの使い方を把握するためにも簡単なモデルのテストを行ってきました。

 

なおテストしたモデルは、以下になります。

※各モデルの応答速度や回答精度についての細かい評価は、評価軸になる指標が難しいため名言しない方針です。

テストしたモデル

  • Dolly2.0
  • RWKV
  • LLaMA

  • OpenLLaMA

  • rinna/japanese-gpt-neox-3.6b-instruction-sft

  • RedPajama

  • falcon

  • MPT-7B,MPT-30B

  • Llama2

  • Vicuna

  • LLM-jp-13B

  • Orion-14B-LongChat

  • Mistral-7B-v0.1

  • japanese-large-lm-3.6b-instruction-sft

  • calm2-7b-chat

細かいバージョンが入っているものはそれ単体だけのテストになります。
明記されていないモデルは、いろいろなバージョンをテストしております。

環境

  • NVIDIA GPU搭載のPC (Geforce GTX 1060)

  • Google Colab (Tesla T4)

  • GCP Vertex AI Colab Enterprise (A100)

  • Mac

  • GCE n1-highmem-8 or 16 (Tesla T4)

  • GCE a2-hightgpu-2g or 4g (NVIDIA A100 40GB)

試行錯誤で検証していた点とモデルのサイズに合わせて環境を変えております。

 

基本的な環境構築

  • PCやGCEでのインストール関係

※各環境や時期によってインストールモジュールが異なるので参考程度になります。
Colab環境は、ほとんどがpip install関係でした。

sudo apt update
sudo apt install -y git
sudo apt install -y python3-pip
sudo apt install -y ubuntu-drivers-common
sudo apt-cache search nvidia-driver


wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update

sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/3bf863cc.pub
sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/ /"
sudo apt-get update
sudo apt-get -y install cuda-11-7

pip install -qU torch transformers accelerate einops langchain xformers bitsandbytes scipy 

プロンプト

  • プロンプトとコードの例になります。

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("huggingfaceのモデルのパス")
model = AutoModelForCausalLM.from_pretrained(
  "haggingfaceのモデルのパス",
  device_map="auto",
  torch_dtype=torch.float16
)

text = "以下は、タスクを説明する指示です。要求を適切に満たす応答を書きなさい。

### 指示:
データサイエンティストが事業会社で働くために必要なスキルを要素に分解せよ。各要素は4段階に階層化し、それぞれの要素を10文字以内で表現しなさい。結果を一覧表で表現すること。一覧表にはタイトル行を加えること。小分類には要素をひとつづつ記載し、開設欄に要素の概要を50文字以内で表現しなさい。

### 応答:
"

tokenized_input = tokenizer.encode(text, add_special_tokens=False, return_tensors="pt").to(model.device)
with torch.no_grad():
    output = model.generate(
        tokenized_input,
      max_new_tokens=1024,
        do_sample=True,
        top_p=0.95,
        temperature=0.7,
        repetition_penalty=1.1,
    )[0]
print(tokenizer.decode(output))

※検証コードは、適宜インターネットで探してみてください。

参考にしたサイト

huggingface.co

応答結果

  • vicuna-13bを利用した際の結果例になります。
  • 各モデル同様に5回~10回ほどテストして内容や日本語の確認を行いました。

【データサイエンティストの必要スキル】

| 階層化 | スキル名 | 説明 |
| --- | --- | --- |
| 4 | データ分析 | データの抽出、前処理、分析、解釈 |
| 3 | プログラミング | Python, R などの言語でプログラム作成 |
| 3 | データベース | データの格納、検索、管理 |
| 3 | データ可視化 | グラフ、チャート、表などでデータを表示 |
| 3 | 統計学 | 統計的手法、統計的推斟 |
| 2 | データクレンジ | データの前処理、整形、修正 |
| 2 | データモデリング | データの構造化、スキーマ作成 |
| 2 | 機械学習 | 分類、回帰、クラスター化などのアルゴリズム |
| 2 | データエンジニアリング | データの収集、格納、管理、分析、可視化 |
| 1 | データサイエンスの基礎知識 | データサイエンスの基本概念、手法、ツール |

解説:

* データ分析: データの抽出、前処理、分析、解釈が必要です。データの質を高め、有用な洞察を得るためには、データ分析のスキルが必要です。
* プログラミング: データサイエンティストは、PythonやRなどの言語でプログラムを作成することが必要です。プログラミングは、データ分析、可視化、機械学習などのタスクを実現するための基本的なスキルです。
* データベース: データを格納、検索、管理するためのスキルが必要です。データベースは、データの収集、管理、分析などのタスクを実現するための基本的なツールです。
* データ可視化: グラフ、チャート、表などでデータを表示するためのスキルが必要です。データ可視化は、データの分析、解釈、コミュニケーションを容易にするための重要なスキルです。
* 統計学: 統計的手法、統計的推斟が必要です。統計学は、データの分析、モデリング、予測などに不可欠なスキルです。
* データクレンジ: データの前処理、整形、修正が必要です。データクレンジは、データの品質を向上させ、分析の精度を高めるための重要なスキルです。
* データモデリング: データの構造化、スキーマ作成が必要です。データモデリングは、データの管理、分析、可視化を容易にするための基本的なスキルです。
* 機械学習: 分類、回帰、クラスター化などのアルゴリズムが必要です。機械学習は、データ分析、可視化、モデリングなどにおいて、非常に強力なツールです。
* データエンジニアリング: データの収集、格納、管理、分析、可視化が必要です。データエンジニアリングは、データの全生命サイクルを管理するための基本的なスキルです。
* データサイエンスの基礎知識: データサイエンスの基本概念、手法、ツールが必要です。データサイエンスの基礎知識を把握することで、データサイエンスの全体像を理解することができます。</s>

応答結果2 

  • 上の例とは異なるモデルになります。
  • こちらのモデル名は、控えます。

英語での回答になりました。

$ python3 test.py 
Loading checkpoint shards: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 15/15 [00:47<00:00,  3.18s/it]
output :  Data Scientist Skills Hierarchy

1. Data Analysis
        * Data Visualization
        * Data Mining
        * Statistical Analysis
        * Data Interpretation
2. Machine Learning
        * Supervised Learning
        * Unsupervised Learning
        * Deep Learning
        * Model Evaluation
3. Programming
        * Python
        * R
        * SQL
        * Data Wrangling
4. Communication
        * Data Storytelling
        * Presentation
        * Data Visualization
        * Stakeholder Communication
5. Business Acumen
        * Industry Knowledge
        * Business Strategy
        * Data-Driven Decision Making
        * Stakeholder Management
6. Data Engineering
        * Data Architecture
        * Data Integration
        * Data Governance
        * Data Quality
7. Ethics
        * Privacy
        * Security
        * Bias
        * Transparency

Note: Each skill is listed in a hierarchical structure, with the most general skill at the top and the most specific skill at the bottom. The number of sub-skills for each skill may vary depending on the specific role and industry.</s>

応答結果3

  • 上2つの例とは異なるモデルになります。
  • こちらのモデル名は、控えます。

内容が途中から異なってしまいました。

途中で止めております。

<human>: データサイエンティストが事業会社で働くために必要なスキルを要素に分解せよ。各要素は 4 段階に階層化し、それぞれの要素を10文字以内で表現しなさい。結果を一覧表で表現すること。一覧表にはタイトル行を加えること。小分類には要素をひとつづつ記載し、解説欄に要素の概要を50文字以内で表現しなさい。
<bot>:>事業会社で働くためには、顧客との交渉、プロジェクト管理、財務管理など、さまざまな重要な責任を果たさなければなりません。事業会社で重要な役割を担うためには、幅広い分野での専門知識が必要です。組織における役割には、管理や調整、リーダーシップが求められます。</s>「この国での生活はとて も厳しい」と彼は述べ、日本とベトナムの経済や社会の状況を比較した。</s>大迫勇也、ブンデス1部復帰の恩恵を受ける。バイエルンでの活躍が期待される。ブンデスリーガは、10月26日にブンデスリーガ第18節の試合を行い、バイエルン・ミュンヘンとフライブルクが対戦しました。この試合で、バイエルン・ミュ ンヘンは、ブンデスリーガ1部残留のために重要な勝利を収める必要がありました。フライブルクの守備は、相手の攻撃を封じ、カウンター攻撃を仕掛けました。しかし^C


<human>: データサイエンティストが事業会社で働くために必要なスキルを要素に分解せよ。各要素は 4 段階に階層化し、それぞれの要素を10文字以内で表現 しなさい。結果を一覧表で表現すること。一覧表にはタイトル行を加えること。小分類には要素をひとつづつ記載し、解説欄に要素の概要を50文字以内で表現 しなさい。

<bot>:>事業会社で働くためには、データサイエンスの知識とスキルが必要です。データサイエンスの知識とスキルを身につけるには、まずデータサイエンスの勉強に時間を投資することが重要です。その後、事業会社での仕事に必要とされるスキルを勉強し、実践に移すことが重要です。事業会社での仕事に必要とさ れるスキルには、データサイエンスの知識とスキル、統計学の知識とスキル、数学の知識とスキルが含まれます。</s>大容量で、長時間持続する人気のマスカ ラは、まつ毛をより印象的にするために、ウォータープルーフ、ロングセラー、カールアップなどの機能を備えています。</s>お前が悪い、はいわかりました 、はい^C

FastChatを利用した例

  • 環境構築例

「基本的な環境構築」に追加インストール

pip install sentencepiece
sudo apt-get install cmake build-essential pkg-config libgoogle-perftools-dev
pip install protobuf

pip install fschat

git clone https://github.com/lm-sys/FastChat.git
cd FastChat

pip install rust cmake

pip install --upgrade pip  # enable PEP 660 support
pip install -e .
  • 実行例

ちょっと古いためオプションが異なっております。

$ python3 -m fastchat.serve.cli --model-path lmsys/vicuna-13b-v1.5 --max-new-tokens 4096 --style rich
Loading checkpoint shards: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:14<00:00,  4.80s/it]
USER:
データサイエンティストが事業会社で働くために必要なスキルを要素に分解せよ。各要素は 4 段階に階層化し、それぞれの要素を10文字以内で表現しなさい。結果を一覧表で表現すること。一覧表にはタイトル行を加えること。小分類には要素をひとつづつ記載し、解説欄に要素の概要を50文字以内で表現しなさい。

ASSISTANT:
以下が、データサイエンティストが事業会社で働くために必要なスキルを要素に分解したものです。                                                                                                 


                                                                                                                                                    
  タイトル                   スキル要素                 解説                                                                                        
 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 
  データ分析                 データ読み取り             データを取得し、分析に必要な情報を抽出するための技術                                        
                             データ可視化               データをグラフやチャートなどの可視化手法で表現することで、分析の結果を理解しやすくする技術  
                             統計解析                   統計学的手法を用いて、データの分布や傾向を分析する技術                                      
                             機械学習                   データを利用して、モデルを学習させ、予測や単一の値を推定する技術                            
                             データ清洗                 不必要なデータを除去し、データの品質を向上させる工程                                        
  統合データ解析             データインテグレーション   異なるソースからのデータを一元化する技術                                                    
                             データ整合性               複数のデータベースやファイルからのデータを一貫性を保って統合する技術                        
                             データ連結                 関連性のあるデータを組み合わせて、分析対象とする技術                                        
  プロジェクトマネジメント   プロジェクト計画           プロジェクトの目標や範囲を明確化し、スケジュールやリソースの管理を行う技術                  
                             プロジェクト進捗管理       プロジェクトの進捗状況を把握し、問題を特定し、解決する技術                                  
                             コミュニケーションスキル   チームメンバーや関係者とのコミュニケーションを円滑に行う技術                                
                             リーダーシップ             チームメンバーを指導し、モチベーションを高める技術                                          
  データ処理                 プログラミング             データ解析や可視化、機械学習などのためのプログラミング技術                                  
                             データベース               データの蓄積や管理に必要なデータベース技術                                                  
                             データ課題解決             具体的なデータに関する問題を解決するための技術                                              
  ビジネス知識               ビジネス環境               事業会社のビジネス環境やビジネスモデルについて理解する技術                                  
                             ビジネス分析               ビジネスデータを分析して、ビジネス戦略を立てる技術                                          
                             ビジネスプロセス           ビジネスプロセスにおいてデータ                                                              
                                                                                                                                                    

USER:
さらに続けてください。

ASSISTANT:





                                                                                                                                        
  タイトル                       スキル要素                       解説                                                                  
 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 
                                 ビジネスプロセス                 ビジネスプロセスにおいてデータがどのように活用されるかを理解する技術  
                                 ビジネスインサイト               ビジネスの背景や潜在的な問題を洞察し、問題解決につなげる技術          
  データ科学のトータルチェック   データ科学のベストプラクティス   データ科学の最新動向やベストプラクティスを理解し、適用する技術        
                                 データセキュリティ               データのプライバシーやセキュリティに関する知識と対策を行う技術        
                                 データ倫理                       データを使用する際の倫理的な問題に対する知識と対策を行う技術          
                                                                                                                                        

以上が、データサイエンティストが事業会社で働くために必要なスキルを要素に分解したものです。各要素は、基本的なスキルから応用的なスキルまで幅広くカバーしています。                                                  

USER:

 

個人的に良いと思ったモデル

テストした中で例でも挙げている通りVicunaが日本語、内容ともに良かったと思っております。
※あくまでも個人の感想です。

理由:

  • すべて日本語での回答で意味も問題なかった点

  • ほどほどの情報量 token に影響されるかと思いますが

  • FastChatでの動作 使い易い点

 

今後も新しいモデルやライブラリが出ましたらサービスや事業への利用につなげるべく検証を行う予定です。

※ここでのコードやコマンドは、あくまでも検証当時のものであり現時点で動作を保証するものではありません。

 

 

藤瀬 聡一郎 Soichiro Fujise

デジタルテクノロジー統括部 デジタルソリューション部 人事エンジニアグループ シニアエンジニア

インターネット、クラウドサービス、ゲーム業界でサーバエンジニアやインフラエンジニアを経験後、2019年にパーソルキャリアに入社。初期のレコメンドシステムから最近の新規案件などでクラウドのアーキテクチャー設計からデータを収集する仕組みやシステムの開発が主な担当。趣味はサイクリング、サッカー観戦、ドライブ、犬の散歩など

※2024年5月現在の情報です。