ELYZA-japanese-Llama-2-7b-instructをDatabricksで動かしてみる

こちらを試してみます。

https://note.com/elyza/n/na405acaca130#a780d03b-a9ee-472e-bb2a-49b1d68ccc69

ライセンスは以下の通りです。

> ライセンスはLlama 2 Community License に準拠しており、Acceptable Use Policy に従う限りにおいては、**研究および商業目的での利用が可能です。**

こちらを使わせていただきます。

https://huggingface.co/elyza/ELYZA-japanese-Llama-2-7b-instruct

クラスターはメモリー256GBのg4dn.16xlargeインスタンスを使ったGPUクラスターです。
![Screenshot 2023-08-30 at 7.57.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/3d15e14c-b949-3308-0c3c-b411fb5ea739.png)

少しコードを変更しています。

```py
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

B_INST, E_INST = "
", "
"
B_SYS, E_SYS = "
\n", "\n
\n\n"
DEFAULT_SYSTEM_PROMPT = "あなたは誠実で優秀な日本人のアシスタントです。"
text = "クマが海辺に行ってアザラシと友達になり、最終的には家に帰るというプロットの短編小説を書いてください。"

model_name = "elyza/ELYZA-japanese-Llama-2-7b-instruct"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype=torch.float16, device_map="auto")

prompt = "{bos_token}{b_inst} {system}{prompt} {e_inst} ".format(
    bos_token=tokenizer.bos_token,
    b_inst=B_INST,
    system=f"{B_SYS}{DEFAULT_SYSTEM_PROMPT}{E_SYS}",
    prompt=text,
    e_inst=E_INST,
)
```

```py
with torch.no_grad():
    token_ids = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt")

    output_ids = model.generate(
        token_ids.to(model.device),
        max_new_tokens=256,
        pad_token_id=tokenizer.pad_token_id,
        eos_token_id=tokenizer.eos_token_id,
    )
output = tokenizer.decode(output_ids.tolist()[0][token_ids.size(1) :], skip_special_tokens=True)
print(output)
```

```
承知しました。以下にクマが海辺に行ってアザラシと友達になり、最終的には家に帰るというプロットの短編小説を記述します。

クマは山の中でゆっくりと眠っていた。
その眠りに落ちたクマは、夢の中で海辺を歩いていた。
そこにはアザラシがいた。
クマはアザラシに話しかける。

「おはよう」とクマが言うと、アザラシは驚いたように顔を上げた。
「あ、おはよう」アザラシは少し緊張した様子だった。
クマはアザラシと友達になりたいと思う。

「私はクマと��
```

関数にして色々試します。

```py
def generate(text):
  prompt = "{bos_token}{b_inst} {system}{prompt} {e_inst} ".format(
    bos_token=tokenizer.bos_token,
    b_inst=B_INST,
    system=f"{B_SYS}{DEFAULT_SYSTEM_PROMPT}{E_SYS}",
    prompt=text,
    e_inst=E_INST,
  )

  with torch.no_grad():
    token_ids = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt")

    output_ids = model.generate(
        token_ids.to(model.device),
        max_new_tokens=256,
        pad_token_id=tokenizer.pad_token_id,
        eos_token_id=tokenizer.eos_token_id,
    )
  output = tokenizer.decode(output_ids.tolist()[0][token_ids.size(1) :], skip_special_tokens=True)
  print(output)
```

```py
generate("大規模言語モデルが何かを小学生が分かるように説明してください。")
```

> 大規模言語モデルとは、コンピュータが人間と同じように言葉を理解するためのものです。例えば、私たちが「コンピュータに言葉を教えて、暑い国を教えて」と言ったとき、コンピュータが「イギリス」という答えを返してくれるのは、大規模言語モデルのおかげです。これは、とてもすごいことなんです！

```py
generate("Databricksが何かを小学生が分かるように説明してください。")
```

> Databricksは、データを集めて分析するための特別なコンピューターを提供する会社です。
> 
> データを集めるときは、たとえばインターネットの中を探索したり、他の人からデータをもらったりします。集めたデータは、たとえば、「ある人が、いつ、何を買ったか」などのような小さな単位ではなく、「ある人が、いつ、何を買ったか」のような大きな単位でまとめておくと、よくわかるようになります。これを「データをクレンジングする」といいます。
> 
> そして、データを集めたり、クレンジングしたりするのに、特別なコンピュ

いい感じです。どんどんLLMのコモディティ化が進んでますね。

### Databricksクイックスタートガイド

[Databricksクイックスタートガイド](https://www.amazon.co.jp/dp/B09V1YXFVQ/)


### Databricks無料トライアル

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