Dolly 2.0に軽く触れてみる
権利的にグレーな方法を使わずに学習データを集めたOSSのAIモデルDolly 2.0が出たので試す。
dolly-v2-3bを普通に試す
huggingfaceのページを参考にしてやってみる。
環境はGoogle Colab。
ライブラリをインストール
!pip install accelerate>=0.12.0 transformers[torch]==4.25.1
モデルを読み込んでテキスト生成のパイプラインを作る。
import torch
from transformers import pipeline
generate_text = pipeline(model="databricks/dolly-v2-3b", torch_dtype=torch.bfloat16, trust_remote_code=True, device_map="auto")
これみて「あれ?」と思ったのだけど、databricks/dolly-v2-3b
のリポジトリをcloneしたりモデルをcurlしたりライブラリをインストールする工程がない。
pipelineにmodel="databricks/dolly-v2-3b"
を指定するだけで勝手に良しなにやってくれる。huggingfaceがデファクトスタンダードになるわけだ。
「犬と猫の違いはなんですか?」と聞いてみる。
generate_text("Explain to me the difference between cat and dog.")
しかし10分経っても返答が返ってこない。
メニューのランタイム→ランタイムのタイプを変更…から、GPU入りにランタイムを変更してみる。
改めて全部実行しなおしてみたところ、10分経っても返ってこなかったプロンプトが44秒で返ってくるようになった。ギリギリ実用レベル。
Cat and dog are both domesticated mammals. They both are part of the Family Muridae. The two main differences between them is how they are typically classified by the scientific community. Scientists also have other classifications of mammals based on their anatomy, behavior, DNA, etc. However, since all of the members of the Muridae family are social, cute mammals that can climb trees, and both humans and animals will eat them if they are left alone, they classify them as Primates. The two primates most often included in the family Muridae are the Cat family and the Dog family. Since they are both part of the Muridae family, they both fall under the umbrella of Primates.
日本語に訳すとこんな感じ。
ネコとイヌは、どちらも家畜化された哺乳類です。どちらもネズミ科に属しています。両者の2つの主な違いは、科学界で一般的にどのように分類されているかということです。科学者たちは、解剖学、行動、DNAなどに基づいて、哺乳類を他の分類も持っています。しかし、ネズミ科の仲間はすべて社会的で、木に登れるかわいい哺乳類であり、放っておくと人間も動物も食べてしまうので、霊長類に分類しているのです。霊長類の中でネズミ科に含まれることが多いのは、ネコ科とイヌ科の2種です。どちらもネズミ科に属するので、霊長類に該当します。
猫も犬もネズミ科の動物で、放っておくと人間も動物も食べてしまうので、霊長類に分類されるらしい。
Google ColabのGPU版のスペックどんなもんかなと調べてみた。
$ !nvidia-smi
Sun Apr 16 02:05:06 2023
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.85.12 Driver Version: 525.85.12 CUDA Version: 12.0 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 Tesla T4 Off | 00000000:00:04.0 Off | 0 |
| N/A 57C P0 26W / 70W | 6717MiB / 15360MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
+-----------------------------------------------------------------------------+
Tesla T4の16GBってことなのかな。
軽く調べたら30万円くらいで売られている。
一番最低グレードの3bモデルを30万のGPUで動かしたら解答に44秒かかる…。厳しい世界だ。
日本語も試してみる。
今度は5秒で結果が返ってきた。初回のみ遅いのかもしれない。
日本語の質問も理解しているようだが、だいぶ哲学的な感じになってしまった。
日本で3番めに人口が多い都道府県を聞いてみたところ、英語では「Chubu」、日本語では「東京、神ozo、新潟」と返ってきた。
英語の解答も微妙だが、日本語のほうでは質問の意図すら正しく理解できていないように見える。
12bに挑戦
また同じのインストールして
!pip install accelerate>=0.12.0 transformers[torch]==4.25.1
今度はdatabricks/dolly-v2-12b
を読み込む。
import torch
from transformers import pipeline
generate_text = pipeline(model="databricks/dolly-v2-12b", torch_dtype=torch.bfloat16, trust_remote_code=True, device_map="auto")
はいダメだった。
メモリが足りない。
GPU版でもTPU版でもダメ。
何度か試したけど全部エラーになった。
お金で解決できることはお金で解決する
Google ColabにはPay As You Goという買い切り1,179円という従量課金のオプションがあるので、それを使う。
この記事によれば、Pay As You GoでGPUを利用すれば暗黙的に12GB→80GBにメモリが強化されるらしい。
GPUをプレミアムに変更。
メモリも80GB以上ある。
12bに挑戦(再)
またインストール。
!pip install accelerate>=0.12.0 transformers[torch]==4.25.1
またモデルのダウンロード。今回は5分で正常に完了した。
import torch
from transformers import pipeline
generate_text = pipeline(model="databricks/dolly-v2-12b", torch_dtype=torch.bfloat16, trust_remote_code=True, device_map="auto")
プロンプト投げる。犬と猫の違い。
generate_text("Explain to me the difference between cat and dog.")
Dogs are typically more active and social creatures than cats. Dogs also love to play and interact with their owners, while cats tend to be more independent. There are also significant breed differences, so this is not a hard and fast rule. Dogs also have a more distinct bark, while most cats meow and cannot bark.
犬は一般的に、猫よりも活動的で社交的な生き物です。また、犬は飼い主と一緒に遊んだり、交流したりするのが大好きですが、猫はより独立心が強い傾向があります。犬種による違いも大きいので、一概には言えませんが。また、犬はよりはっきりとした吠え方をしますが、ほとんどの猫はニャーと鳴き、吠えることができません。
Good!
日本語でも聞いてみる。
generate_text("犬と猫の違いを教えて")
犬と猫は狭boldmathilion of variants whereby can mean 'different', 'vary' or'speak differently'. 猫には、口元をか forma /lack of lipsmearing] like a cat. [の anatomical feature is a thick lower lip. 犬と同じように、口元をかく can mean 'like a dog', i.e. having a thin lower lip.
Variant: do_not_speak differently can mean 'do not speak differently', i.e. have a thin lower lip like a dog, and a thick lower lip like a cat.
Do not vary can mean 'do not differ', i.e. have a thin lower lip like a dog and a thin lower lip like a cat.
The following contrast both contrast and variant.犬は口元が thick lower lip の do_not_speak differently の variant
猫は口元が thick lower lip の do_not_speak differently の variant
なんか荒ぶってる。
もう一度聞く。
generate_text("犬と猫の違いを教えて")
犬は食べたいものをとるのに最適
猫は食べたくないものをとるのに最適
謎かけだろうか。
やはり日本語は苦手そう。3bより苦手かも。
日本語が難しいのは分かった。
では英語なら難しい質問にも答えられるのか。
「犬とコンピュータにはあるのに、猫にはないものはなんですか?」と英語で聞いてみた。
generate_text("What do dogs and computers have that cats do not?")
Dogs and Computers may have many things in common. They are both species, both come in many types, they are both utilized for communication, both are and were domesticated by humans, both require a clean place to live, and both may require repetitive tasks performed every so often.
犬とコンピューターには、多くの共通点があります。 どちらも種族であり、様々な種類があり、コミュニケーションに利用され、人間に飼い慣らされ、清潔な場所を必要とし、頻繁に繰り返される作業を必要とするかもしれません。
犬とコンピュータの共通点は答えられてる。猫との違いは答えられていない。
ChatGPTでも同様の質問を日本語でしてみたが、やはりChatGPTさすがだ。
Dallyの日本語データセットも有志が用意してくれているので、次はこれも試してみたい。