Open22

Dolly 2.0に軽く触れてみる

kurehajimekurehajime

権利的にグレーな方法を使わずに学習データを集めたOSSのAIモデルDolly 2.0が出たので試す。

kurehajimekurehajime

dolly-v2-3bを普通に試す

huggingfaceのページを参考にしてやってみる。
https://huggingface.co/databricks/dolly-v2-3b

環境はGoogle Colab。

kurehajimekurehajime

ライブラリをインストール

!pip install accelerate>=0.12.0 transformers[torch]==4.25.1
kurehajimekurehajime

モデルを読み込んでテキスト生成のパイプラインを作る。

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がデファクトスタンダードになるわけだ。

kurehajimekurehajime

「犬と猫の違いはなんですか?」と聞いてみる。

generate_text("Explain to me the difference between cat and dog.")

しかし10分経っても返答が返ってこない。

kurehajimekurehajime

メニューのランタイム→ランタイムのタイプを変更…から、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種です。どちらもネズミ科に属するので、霊長類に該当します。

猫も犬もネズミ科の動物で、放っておくと人間も動物も食べてしまうので、霊長類に分類されるらしい。

kurehajimekurehajime

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秒かかる…。厳しい世界だ。

kurehajimekurehajime

日本語も試してみる。

今度は5秒で結果が返ってきた。初回のみ遅いのかもしれない。
日本語の質問も理解しているようだが、だいぶ哲学的な感じになってしまった。

kurehajimekurehajime

日本で3番めに人口が多い都道府県を聞いてみたところ、英語では「Chubu」、日本語では「東京、神ozo、新潟」と返ってきた。
英語の解答も微妙だが、日本語のほうでは質問の意図すら正しく理解できていないように見える。

kurehajimekurehajime

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")
kurehajimekurehajime

はいダメだった。

メモリが足りない。

GPU版でもTPU版でもダメ。
何度か試したけど全部エラーになった。

kurehajimekurehajime

お金で解決できることはお金で解決する

Google ColabにはPay As You Goという買い切り1,179円という従量課金のオプションがあるので、それを使う。

https://colab.research.google.com/signup/pricing?hl=ja

kurehajimekurehajime

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")
kurehajimekurehajime

プロンプト投げる。犬と猫の違い。

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!

kurehajimekurehajime

日本語でも聞いてみる。

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

なんか荒ぶってる。

kurehajimekurehajime

もう一度聞く。

generate_text("犬と猫の違いを教えて")

犬は食べたいものをとるのに最適
猫は食べたくないものをとるのに最適

謎かけだろうか。
やはり日本語は苦手そう。3bより苦手かも。

kurehajimekurehajime

日本語が難しいのは分かった。
では英語なら難しい質問にも答えられるのか。

「犬とコンピュータにはあるのに、猫にはないものはなんですか?」と英語で聞いてみた。

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.

犬とコンピューターには、多くの共通点があります。 どちらも種族であり、様々な種類があり、コミュニケーションに利用され、人間に飼い慣らされ、清潔な場所を必要とし、頻繁に繰り返される作業を必要とするかもしれません。

犬とコンピュータの共通点は答えられてる。猫との違いは答えられていない。