💬

Falcon-40B 味見メモ(3090 x 2 で動作. 日本語はうまく扱えなかった)

2023/06/12に公開

2023/06 時点で, つよつよ LLM の一つ Falcon-40B

https://towardsdatascience.com/harnessing-the-falcon-40b-model-the-most-powerful-open-source-llm-f70010bc8a10

Apache 2.0 ライセンスになり使いやすくなりました
(著者は Apache 2.0 後に Falcon を知りましたが, それより前は売上の 10% 納めるみたいなライセンス形態だったっぽい?)

とりま動かす

  • x299 CPU mem 256 GB
  • 3090 x 2
  • Ubuntu 20.04

と, どこのご家庭にもある 3090 x 2 で動かします.

https://huggingface.co/blog/falcon

の blog にあるように, 8bit であれば 48 GB(24 x 2)に収まります.

instruct 版使ってみます.

import time

from transformers import AutoTokenizer
import transformers
import torch

model = "tiiuae/falcon-7b-instruct"

tokenizer = AutoTokenizer.from_pretrained(model)
pipeline = transformers.pipeline(
    "text-generation",
    model=model,
    tokenizer=tokenizer,
    torch_dtype=torch.bfloat16,
    trust_remote_code=True,
    device_map="auto",
)

s = time.time()
sequences = pipeline(
   "Write a poem about Kyoto.",
    max_length=200,
    do_sample=True,
    top_k=10,
    num_return_sequences=1,
    eos_token_id=tokenizer.eos_token_id,

)
e = time.time()
print("run secs: " , (e - s))

for seq in sequences:
    print(f"Result: {seq['generated_text']}")

モデルロードと変換は 5 分くらい, 生成(up to 200 tokens)は 2 分ほどかかりました.

+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 530.30.02              Driver Version: 530.30.02    CUDA Version: 12.1     |
|-----------------------------------------+----------------------+----------------------+
| 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  NVIDIA GeForce RTX 3090         Off| 00000000:65:00.0 Off |                  N/A |
| 36%   49C    P5               35W / 160W|  24164MiB / 24576MiB |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+
|   1  NVIDIA GeForce RTX 3090         Off| 00000000:B3:00.0 Off |                  N/A |
| 50%   39C    P5               65W / 160W|  23117MiB / 24576MiB |     95%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+

メモリ使用量は 24 GB + 23 GB とぎりぎりでした.

結果は

The city of Kyoto is a place where ancient and modern meet harmoniously. A place that embraces both the traditional and the modern ways of living. The serene temples, the tranquil gardens and the bustling streets are all a testament to the beauty of this ancient city. As you wander through the narrow streets, you will encounter countless treasures, from traditional shops selling handmade crafts to modern shops showcasing the latest fashion trends. The people of Kyoto are warm and welcoming, always eager to share their rich culture and history with anyone willing to listen. If you are lucky enough to visit this beautiful city, you will find that Kyoto has so much to offer, from its stunning architecture to its delicious foods and vibrant culture.

うーん, poem ではなく単なる解説になっているが... とりあえずはヨシ!

日本語はダメだった

prompt を 京都についての詩を考えて にしてみました.

Result: 京都についての詩を考えて.京都の魅力
京都を思い出すと、いろいろな思いがありますね。京都の美しいお寺それぞれの魅力、京都の古くかでもまさにまるで新しいお食事、美しい山と川、そしてアイディアのショッピングスポットですごもごもあります。京都をこれまでお体験されたあなたには、よりまち�

日本語はいくらか扱えるようですが, broken ですね...

あと, 試行によっては

I'm sorry, I cannot generate a meaningful response as your prompt is in Japanese and I am an AI language model that primarily operates in the English language. Could you please rephrase it in English?

と返されました. instruct 用(chat 用)に prompt 調整すればもう少しうまくいくかもはしれませんが, 素の状態ではあまり日本語は期待できなさそうです.
日本語データセットでファインチューンすればワンチャンあるかもはしれません.

llama.cpp, CTranslate2 で CPU で動かす?

https://github.com/ggerganov/llama.cpp/issues/1602

執筆時点(2023/06/12)では, 7B はサポート, 40B はまだ動かないでした. しばらくすれば動くでしょう.

4bit であれば, 40b は 32 GB CPU mem な PC でうごくでしょう.
(さすがにスマホは無理であろうが)

また CTranslate2 では対応されてました.

https://github.com/OpenNMT/CTranslate2/commit/4108c0a9167646a8204c6ab5ab1cd7630ed0abeb

お時間あるかたは試してみてくださいネ.

Discussion