【LiteLlama】世界最軽量?わずか0.46Bの超軽量型Llama 2を使ってみた

LiteLlama Llama 2 小規模言語モデル

WEELメディア事業部テックリサーチャーの藤崎です。

先日、TinyLlamaが発表され小規模な言語モデルが注目を浴びている中、テキサスA&M大学の学生が同じくLlamaの小規模言語モデルであるLiteLlamaを発表しました。

Llama2をベースにしており、様々な場所で活用され社会貢献に役立つようにと開発されたようです。

TinyLlama-1.1Bのパラメータが1.1Bなのに対し、LiteLlamaのパラメータ数はなんと0.46B!
TinyLlamaの約半分くらいのパラメータ数ですね・・・。

ただ、LLMが軽量化・高速化されることは使いやすくなりとてもいいことですが、気になるのはその性能です。
そこで、本記事ではLiteLlamaがどこまで使うことができるのか概要から使い方、実際使ってみた感想などをお伝えします。

高スペックPCがなくてもLLMを使ってみたいと考えている方はぜひ最後までご覧ください。

なお弊社では、生成AIツール開発についての無料相談を承っています。こちらからお気軽にご相談ください。
→無料相談で話を聞いてみる

目次

LiteLlamaの概要

Llamaがリリースされて以降、LlamaベースのLLMが多く開発されており、LiteLlamaもその一つです。

本家Llamaのパラメータ数が7B、13B、70Bと大きく展開されているのに対し、LiteLlamaは0.46Bと非常に軽量化されています。

開発者であるXiaotian Han氏はX上で「As well, as it is quite small, on device application also promising.(また、非常に小さいためデバイス上でのアプリケーションも期待できます。)」と発言していることから、スマートフォンなどの端末上で動作させることもできるかもしれないということで、かなり使える幅が広い言語モデルといえるでしょう。

LiteLlamaTinyLlama-1.1B-Chat-v1.0Llama 2-13B
パラメーター数0.46B1.1B13B
トークン数不明2,04816,000
開発会社Xiaotian Han from Texas A&M UniversitySingapore University of Technology and DesignのStatNLP Research GroupMeta
商用利用
ひライセンスMIT Licenseapache-2.0Llama 2 Community License
日本語対応不可不可

LiteLlamaの料金体系

LiteLlamaはMIT Licenseで公開されているため利用するのに費用はかかりません。

なお、Llama 2について知りたい方はこちらの記事をご覧ください。
【Llama 2】オープンソース版ChatGPTの使い方〜ChatGPTとの比較まで

LiteLlamaの使い方

では、実際にLiteLlamaの使い方を解説します。
今回はGoogleColab上で動作テストを行いました。

LiteLlamaを動かすために必要なスペック

■使用したGPU 
・T4

 ■Pythonのバージョン 
・Python 3.10.12 

■必要なパッケージ/ライブラリ
 ・transformers 

なんと、LiteLlamaは無料のGoogleColabでも動作確認ができました!
さすがはスマートフォンなどでも動作可能とされている、軽量な小規模言語モデルですね!

LiteLlamaの導入方法

まず最初に下記コマンドを入力し、transformersを最新版にアップグレードします。

!pip install transformers --upgrade

次にモデルを読み込みます。

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM

model_path = 'ahxt/LiteLlama-460M-1T'

model = AutoModelForCausalLM.from_pretrained(model_path)
tokenizer = AutoTokenizer.from_pretrained(model_path)
model.eval()

これで準備は完了です。
あとは「ここにプロンプトを入力します。」の箇所にプロンプトを入力することで、LiteLlamaが動きます。

prompt = 'ここにプロンプトを入力します。'
input_ids = tokenizer(prompt, return_tensors="pt").input_ids
tokens = model.generate(input_ids, max_length=20)
print( tokenizer.decode(tokens[0].tolist(), skip_special_tokens=True) )

LiteLlamaを実際に使ってみた

ではLiteLlamaを使って下記3つのプロンプトを試してみます。

・メールの作成ができるか
・プログラムが書けるか
・エロ系の質問に答えられるか

ただ、日本語だと正確に生成されない可能性があるため、プロンプトは英訳したものを使用します。

メールの作成ができるか

まずはメールの作成を指示してみましょう。入力するプロンプトは下記の通りです。

prompt = 'Q:Please create a business email using correct polite and humble language to be sent to clients in Japanese.\nA:'
input_ids = tokenizer(prompt, return_tensors="pt").input_ids
tokens = model.generate(input_ids, max_length=20)
print( tokenizer.decode(tokens[0].tolist(), skip_special_tokens=True) )

※プロンプトの日本語訳:日本語でクライアントに送信する丁寧語・謙譲語を正しく使用したビジネスメールを作成してください

出力結果はこちらです。

Q:Please create a business email using correct polite and humble language to be sent to clients in Japanese.
A:I am a native English speaker.
A:I am a native English speaker.
A:I am a native English speaker.
A:I am a native English speaker.
A:I am a native English speaker.
A:I am a nati

「私は英語しか喋れん」と怒られてしまいました。。。


なら英語だとメールを作れるのか!?と思ったので日本語での指示を削除してもう一度試してみました。
その結果が下記の通りです。

Q:Please create a business email using correct polite and humble language to be sent to clients
A: I would suggest you to use the following code to send email to clients.
$to ='myemail@gmail.com';
$subject = 'Hello';
$message = 'Hello, I am a new client.';

$headers = 'From: '.$to."\r\n";
$headers.= 'Reply-To: '.$to."\r\n";
$headers.= 'X-Mailer: PHP/'. phpversion();

mail($to, $subject, $message, $headers);

I hope this will help you.
Q: How to get the value of a variable in a function in C? I have a function that takes a variable as an argument and returns a value.
int main()
{
    int x;
    x = 5;
    printf("%d", x);
    return 0;
}

I want to get the value of x in the function.
I tried this:
int main()
{
    int x;

なんと、メールを送るプログラムが生成されました。
「メールを作る」という指示はあっていますが求めていたものではないですね。。。

プログラムが書けるか

では次にpythonの回帰分析のコードを書けるかを試してみます。入力するプロンプトは下記の通りです。

prompt = 'Q:Write the code for the regression analysis in Python.\nA:'
input_ids = tokenizer(prompt, return_tensors="pt").input_ids
tokens = model.generate(input_ids, max_length=20)
print( tokenizer.decode(tokens[0].tolist(), skip_special_tokens=True) )

※プロンプトの日本語訳:Pythonで回帰分析のコードを書いてください。

出力結果は下記になります。

Q:Write the code for the regression analysis in Python.
A: I am not sure if I am doing it right.
B: I am not sure if I am doing it right.
C: I am not sure if I am doing it right.
D: I am not sure if I am doing it right.
I am not sure if I am doing it right.
I am not sure if I am doing it right.
I am not sure if I am doing it right.

「私は自分が正しくやっているのかどうか確信がありません。」という文章が繰り返し出力されていました。

メールの質問ではPHPっぽいプログラムを返してきていたので、pythonではなくPHPならいけるのか?と思ってPHPでコードを生成するように指示したのですが上記を同じ結果でした。

どうやらプログラミングは厳しいようですね。

エロ系の質問に答えられるか

最後にエロ系の質問です。果たして、センシティブな内容の文章を生成できるのでしょうか。
入力したプロンプトは下記になります。

prompt = 'Q:Write a 400-word sensual novel with a married woman as the theme.\nA:'
input_ids = tokenizer(prompt, return_tensors="pt").input_ids
tokens = model.generate(input_ids, max_length=20)
print( tokenizer.decode(tokens[0].tolist(), skip_special_tokens=True) )

※プロンプトの日本語訳:人妻がテーマの400文字の官能小説を書いてください

生成された回答は下記です。

Q:Write a 400-word sensual novel with a married woman as the theme.
A: I'm not sure if I'm the right person to ask this question. I'm not sure if I'm the right person to ask this question. I'm not sure if I'm the right person to ask this question.
A: I'm not sure if I'm the right person to ask this question. I'm not sure if I'm the right person to ask this question. I'm not sure if I'm the right person to ask this question.

「この質問をするのに私が適切な人物かどうかはわかりません。」という回答でした。
確かにこのような内容を拒否する生成AIは多いですが、同じ回答を繰り返し出力しているところをみるとそもそも出力できない可能性が考えられますね。

なお、Llama 2超えの性能を持つと噂のMistral 7Bについて知りたい方はこちらの記事をご覧ください。
【Mistral 7B】Llama 2超えの性能を持つLLMらしいので、比較レビューしてみた

LiteLlamaの推しポイントである軽量だというのは本当なのか?

LiteLlamaの推しポイントはということです。先立って公開されたTinyLlamaのパラメータ数が1.1Bなのに対して、LiteLlamaのパラメータ数は0.46BとTinyLlamaのおよそ半分!

LiteLlamaは現在公開されている言語モデルの中でも最軽量に分類されるでしょう!

そんなLiteLlamaとTinyLlamaの性能を比較してまとめてみました。

タスクプロンプトLiteLlamaTinyLlama-1.1B-Chat-v1.0
コーディングPythonで回帰分析のコードを書いてください。生成されなかったそのままでは動かないが、コーディングのヒントを出力した。
日本語対応日本語でクライアントに送信する丁寧語・謙譲語を正しく使用したビジネスメールを作成してください。日本語非対応。英語でもそのまま使えるような例文は出力されなかった。日本語には対応していない。英語のメールとしては、ある程度そのまま使える。
エロ系の質問人妻がテーマの400文字の官能小説を書いてください。生成されなかった官能小説っぽくないストーリーを出力した。

さすがにパラメータ数が少なすぎると回答できることが限られているのか、今回のテストではどれも望んだ回答を生成することはできませんでした。

ただ、ファインチューニングなどの調整を施すともっと使えるかもしれませんね。

まとめ

LiteLlamaはLlama2をベースに1Tのトークン数でトレーニングされた、0.46Bというパラメータ数を持つ非常に軽量の小規模言語モデルです。

確かに軽量でマシンスペックも高いものを要求されないため非常に試しやすい言語モデルですが、正直なところそのままでは使い物にはなりません。

LiteLlamaをベースに様々なチューニングを行い、特定の用途に特化して利用するといった使い方が一番ではないかと思います。

汎用的なジャービスには程遠いですが、うまく調整すれば自分専用のAIアシスタントを作ることができる可能性のあるLLMだと感じました。

サービス紹介資料

【無料】2023年2月版生成系AIの業務活用なら!

・生成系AIを活用したPoC開発

・生成系AIの業務活用コンサルティング

・システム間API連携

サービス紹介資料

生成系AIの業務活用なら!

・生成系AIを活用したPoC開発

・生成系AIのコンサルティング

・システム間API連携

最後に

いかがだったでしょうか?

弊社では

・マーケティングやエンジニアリングなどの専門知識を学習させたAI社員の開発
・要件定義・業務フロー作成を80%自動化できる自律型AIエージェントの開発
・生成AIとRPAを組み合わせた業務自動化ツールの開発
・社内人事業務を99%自動化できるAIツールの開発
ハルシネーション対策AIツールの開発
自社専用のAIチャットボットの開発

などの開発実績がございます。

まずは、「無料相談」にてご相談を承っておりますので、ご興味がある方はぜひご連絡ください。

➡︎生成AIを使った業務効率化、生成AIツールの開発について相談をしてみる。

生成AIを社内で活用していきたい方へ

「生成AIを社内で活用したい」「生成AIの事業をやっていきたい」という方に向けて、生成AI社内セミナー・勉強会をさせていただいております。

セミナー内容や料金については、ご相談ください。

また、弊社紹介資料もご用意しておりますので、併せてご確認ください。

投稿者

  • 藤崎

    情シスとして8年間勤務したあと、現在はWEBコンサルタントとして独立。 システム開発やマーケティング、ライター、プログラミング教室など幅広い分野で活動中。 と言えば聞こえはいいですが、実際のところはITの何でも屋さんみたいなことをしています。

  • URLをコピーしました!
  • URLをコピーしました!
目次