Stockmarkのgpt-neox-japanese-1.4bをDatabricksで動かしてみる

しばらくLLMを触っていなかったのでLLM欲を抑えられませんでした。

こちらを見て試してみたくなりました。本当に、日常的にLLMが発表される世界になっていますね。

https://tech.stockmark.co.jp/blog/202308_gpt_neox/

> 当社はビジネスにおける情報収集・分析をサポートするサービスを運営しており、そのために最新のWebデータの収集を日々行なっております。今回の事前学習では、一般にLLMの事前学習によく使われるCommon Crawl由来のデータだけでなく、当社が所有している独自のWebデータ（2023年6月まで）も含めて事前学習を行うことで、最近の話題にも詳しいモデルを開発しました。具体的には、事前学習に用いたデータセットはCC100の日本語サブセット、Wikipediaの日本語版、当社独自の日本語Webデータから構成されています。コーパス全体でのデータ量は約200億トークンで、そのうち当社独自のWebデータは約90億トークンほどです。モデルのアーキテクチャの詳細などは以下をご覧ください。

クラスターはg5.8xlarge(128GB, 1GPU)のクラスターを使います。
![Screenshot 2023-08-09 at 8.20.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/f2aa2000-cab5-7c5c-5ab9-56acfecabfce.png)

こちらのサンプルを動かします。

https://huggingface.co/stockmark/gpt-neox-japanese-1.4b

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

# Use torch.bfloat16 for A100 GPU and torch.flaot16 for the older generation GPUs
torch_dtype = torch.bfloat16 if torch.cuda.is_available() and hasattr(torch.cuda, "is_bf16_supported") and torch.cuda.is_bf16_supported() else torch.float16

model = AutoModelForCausalLM.from_pretrained("stockmark/gpt-neox-japanese-1.4b", device_map="auto", torch_dtype=torch_dtype)
tokenizer = AutoTokenizer.from_pretrained("stockmark/gpt-neox-japanese-1.4b")

inputs = tokenizer("自然言語処理は", return_tensors="pt").to(model.device)
with torch.no_grad():
    tokens = model.generate(
        **inputs,
        max_new_tokens=128,
        repetition_penalty=1.1
    )
    
output = tokenizer.decode(tokens[0], skip_special_tokens=True)
print(output)
```

> 自然言語処理は、人工知能(AI)や機械学習と密接な関係があります。例えば、Google翻訳の精度は年々向上しており、2017年11月には日本語を含む20カ国語に対応しました。また、Amazonの「Alexa」も音声による操作が可能になり、2018年には対応言語を50以上に増やす予定です。このように、機械が人間の言葉を理解する技術は日々進歩しています。しかし、その反面、人間が言葉の意味を理解できない場面も増えてきています。例えば、「Aという単語の意味はBだ」と理解していても、それが正しいとは限りません。「Aという単語の意味はCである」と説明されても、それは必ずしも正解ではないのです。このような問題を解決するために生まれたのが、自然言語処理

すごいですね。

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

```py
def generate_text(input_text):
  inputs = tokenizer(input_text, return_tensors="pt").to(model.device)
  with torch.no_grad():
    tokens = model.generate(
        **inputs,
        max_new_tokens=128,
        repetition_penalty=1.1
    )
    
  output = tokenizer.decode(tokens[0], skip_special_tokens=True)
  return output
```

```py
print(generate_text("Databricksとは"))
```

若干微妙ですがDatabricksも理解しているようです。

> Databricksとは、データレイクは、データを収集・分析するためのプラットフォームです。
「データレイク」と呼ばれることもあります。
データウェアハウスやデータ分析基盤などとも呼ばれます。
データの保存場所であるストレージを分散して配置し、複数のサーバーに格納されたデータを統合することで、高速な検索とアクセスを可能にします。
また、蓄積したデータは、BIツールで可視化したり、機械学習に活用することができま

```py
print(generate_text("MLflowとは"))
```

Googleでは提供していないですし、途中からPythonの基本に行ってしまっていますが機械学習の自動化ツールというところは合っています。

> MLflowとは、Googleが提供している機械学習の自動化ツールです。
「Python」はプログラミング言語の一つで、「AI」「データサイエンス」といった分野でも活用されています。
また、Webブラウザ上で動作するアプリケーションの開発やデータ分析など、幅広い用途で使われています。
今回は、そんな「Python」について、基本から学習方法まで詳しく解説します。
まずは、Pythonの基本を学びましょう。
Pythonには、大きく分けて3つの特徴があります。
1つ目は、シンプルで習得しやすいことです。
2つ目に、さまざまな分野で活用できる汎用性が高いことです。
3つ目は、他の言語に比べて少ないコード量で開発できることです。
ここからは、それぞれの特徴について詳しく解説していきます。
Pythonは、

時間見つけて色々試してみます。しかし、1.4bという軽量なモデル([Dolly](https://qiita.com/taka_yayoi/items/59f0ba1a07c620a70a75)は12b)でもこれだけのパフォーマンスが出るようになるとは、技術の進歩が恐ろしい(そして、楽しい)です。

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

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


### Databricks無料トライアル

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