LLM-jp-13B v2.0をDatabricksで動かしてみる

GWもLLMに勤しみます。

https://www.nii.ac.jp/news/release/2024/0430.html

こちらを見ると、Pre-trainedとtunedがありますね。

https://llm-jp.nii.ac.jp/release/

おお、`dolly`の文字が。

https://huggingface.co/llm-jp/llm-jp-13b-instruct-full-dolly-ichikara_004_001_single-oasst-oasst2-v2.0

Instruction tuningで[databricks\-dolly\-15k\-ja](https://huggingface.co/datasets/llm-jp/databricks-dolly-15k-ja)が使われています。(私が作ったわけではないですが)嬉しい。[Dolly](https://qiita.com/taka_yayoi/items/59f0ba1a07c620a70a75)はDatabricksが一年前に公開したオープンソースLLMであり、[databricks-dolly-15k](https://huggingface.co/datasets/databricks/databricks-dolly-15k)はファインチューニングの際に用いたテキストコーパスです。Databricks社員が作成しました(私はサボって作成しませんでした)。

ということで、Databricksで動かします。GPUクラスターを準備。
![Screenshot 2024-04-30 at 16.38.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/7c57429b-fde6-fa80-54f1-21df3b3264dd.png)

モデルカードに記載されているライブラリのバージョンではうまく動かなかったのですが、Databricksランタイム 14.3 LTS MLデフォルトのライブラリで動きました。

```py
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("llm-jp/llm-jp-13b-instruct-full-dolly-ichikara_004_001_single-oasst-oasst2-v2.0")
model = AutoModelForCausalLM.from_pretrained("llm-jp/llm-jp-13b-instruct-full-dolly-ichikara_004_001_single-oasst-oasst2-v2.0", device_map="auto", torch_dtype=torch.bfloat16)
chat = [
    {"role": "system", "content": "以下は、タスクを説明する指示です。要求を適切に満たす応答を書きなさい。"},
    {"role": "user", "content": "自然言語処理とは何か"},
]
tokenized_input = tokenizer.apply_chat_template(chat, add_generation_prompt=True, tokenize=True, return_tensors="pt").to(model.device)
with torch.no_grad():
    output = model.generate(
        tokenized_input,
        max_new_tokens=100,
        do_sample=True,
        top_p=0.95,
        temperature=0.7,
        repetition_penalty=1.05,
    )[0]
print(tokenizer.decode(output))
```

> 以下は、タスクを説明する指示です。要求を適切に満たす応答を書きなさい。
> 
> ### 指示:
> 自然言語処理とは何か
> 
> ### 応答:
> 自然言語処理（NLP）は人工知能とコンピュータサイエンスの一分野であり、自然言語におけるコンピュータと人間の相互作用に焦点を当てている。コンピュータが人間の言語を理解、解釈、生成できるようにするアルゴリズム、モデル、ツールの開発を扱う。
> 
> NLPでは、人間が言語を処理する方法と同様の方法で、人間の言語を分析、理解、反応するようにコンピュータを訓練する。

自然です。トークン数を増やして他も試してみます。

```py
chat = [
    {"role": "system", "content": "以下は、タスクを説明する指示です。要求を適切に満たす応答を書きなさい。"},
    {"role": "user", "content": "江戸時代の流れを簡潔に説明せよ"},
]
tokenized_input = tokenizer.apply_chat_template(chat, add_generation_prompt=True, tokenize=True, return_tensors="pt").to(model.device)
with torch.no_grad():
    output = model.generate(
        tokenized_input,
        max_new_tokens=500,
        do_sample=True,
        top_p=0.95,
        temperature=0.7,
        repetition_penalty=1.05,
    )[0]
print(tokenizer.decode(output))
```

> 以下は、タスクを説明する指示です。要求を適切に満たす応答を書きなさい。
> 
> ### 指示:
> 江戸時代の流れを簡潔に説明せよ
> 
> ### 応答:
> 江戸時代（1603年～1867年）は、日本の歴史において260年以上続いた時代である。この時代には、社会階級、文化、政治、経済など多くのことが変化した。江戸時代の始まりは、徳川家康が征夷大将軍に任命され、江戸に幕府を開いたときに訪れた。徳川家による支配は264年間続いた。
> 
> 江戸時代の後半には、日本は大きく発展し、世界でも有数の先進国となった。江戸は、現在の東京の首都として機能する、大都市および経済的中心地となった。江戸時代の人口は約100万人で、世界最大の人口を擁していた。
> 
> 江戸時代には、政治、経済、社会のさまざまな側面で多くの革新的な出来事があった。税金や法律は、現在も使われているモデルの基礎を築いた。教育制度も確立され、世界でも有数の識字率を誇っていた。
> 
> 農業、製造業、商業、文化活動など、さまざまな分野で繁栄した。しかし、江戸時代の大きな問題のひとつは、失業問題、特に参勤交代の藩士たちの不満だった。江戸時代の社会的、経済的構造は、明治維新の役人たちが近代化を推進する際のモデルとなった。<EOD|LLM-jp>

言語特化にすることで軽量なモデルでも高いパフォーマンスを示すというのは納得です。

### はじめてのDatabricks

[はじめてのDatabricks](https://qiita.com/taka_yayoi/items/8dc72d083edb879a5e5d)

### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)