1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

WSL2 で LINE の 3.6B 言語モデルを使ってみる

Last updated at Posted at 2023-08-19

目次

1. はじめに
2. 環境
3. 環境構築
4. 実行してみる
5. まとめ
参考文献

1. はじめに

最近 LINE から LLM が出たみたいです.AI 関連については積極的に情報を追っていないのですが,自分が普段見ている YouTube に出ている shi3z さんだけは追っています.

この動画を見て LINE の LLM 面白そうだなと思ったのが今回のモチベーションです.

2. 環境

Windows 11 の WSL2 で動かしました.バージョンや GPU は以下の通り.

  • OS: Windows 11 Home 22H2
  • WSL2: Debian
  • GPU: NVIDIA GeForce RTX 2060

Python と CUDA のバージョンは以下の通り.

$ python --version
Python 3.11.4
$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Tue_Jun_13_19:16:58_PDT_2023
Cuda compilation tools, release 12.2, V12.2.91
Build cuda_12.2.r12.2/compiler.32965470_0

WSL2 に GPU を認識させ,CUDA を入れる方法はご自分で調べてくださいませ.

3. 環境構築

Python は pyenv と Anacondaを使い環境を管理しています.

$ conda create -n llm-line
$ pip install transformers accelerate bitsandbytes
$ pip install sentencepiece
$ pip install scipy

基本的に conda で入れていたのですが,bitsandbytes が GPU を認識してくれなかったので,すべて pip で入れたところ認識しうまく動きました.WSL2 で動かす時にあたって,このライブラリのソースコードを変更している人もいましたが,私は pip で入れたままで動きました.
scipy は下のコードを実行したときに必要って言われたのでいれました.

4. 実行してみる

以下のコードで実行しました.LINE の LLM にはベースモデルの line-corporation/japanese-large-lm-3.6b と指示モデルの line-corporation/japanese-large-lm-3.6b-instruction-sft があるようで,今回はテキストの続きを書いてもらうということでベースモデルを使いました.

mian.py
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer


def main():
    line(
        "line-corporation/japanese-large-lm-3.6b",
        "ゆゆ式で一番かわいいのは"
    )


def line(llm, prompt):
    # トークナイザーとモデルの準備
    tokenizer = AutoTokenizer.from_pretrained(
        llm,
        use_fast=False
    )
    model = AutoModelForCausalLM.from_pretrained(
        llm,
        load_in_8bit=True,
        torch_dtype=torch.float16,
        device_map="auto",
        use_safetensors=False
    )

    # 推論の実行
    input_ids = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt")
    tokens = model.generate(
        input_ids.to(device=model.device),
        min_length=50,
        max_length=300,
        temperature=1.0,
        do_sample=True,
        pad_token_id=tokenizer.pad_token_id,
    )
    output = tokenizer.decode(tokens[0])
    print(output)


if __name__ == '__main__':
    main()

出力
ゆゆ式で一番かわいいのは 唯ちゃんですね、うん 唯ちゃんだけを見て生きる。唯ちゃん最強!   唯ちゃんはすごい!唯ちゃんに一目惚れして2年間ずっと好きな女子です。 唯ちゃん以外愛せなくて辛いですけど( ́・_・`) 唯ちゃんは私の永遠の憧れの人です!めっちゃかわいいー! ゆいかおりは、人気ありますね  声優さんも可愛いですし!  かおりんと、ユイカちゃん可愛いですよね(* ́`)♪私も、唯ちゃんに惚れました!笑かわいい 大好き まじで可愛すぎ! 唯も好きですよ!めっちゃかわいいですよ! ファンはたくさんいますよ!声優も可愛いですよね!</s>

どっかのタイミングから声優の話になってて草 私は縁ちゃん派です.そういえば大学の先生でお母さん派とかいう人いたな......

スクリーンショット (13).png
実行中の GPU 使用状況.しっかり使ってますね.

5. まとめ

LLM をはじめて触ってみましたが,ローカルで AI が動いているというところにまず感動しました.でも出力が出るまでかなり時間がかかる印象です.VRAM の大きい GPU を使うと早かったりするのかな?また,同じ入力でも実行する度に違う出力が出ることも気になりました.LLM ってそんなもんなんかな?高い GPU を使えば出力の精度が上がったり安定したりするもんなんだろうか.
今回は動かしてみただけですが,こういうやつはそれぞれチューニングするのが楽しかったりするみたいです.今の環境ではそんなことする気がおきないな......
でも,日本人によりそった AI って感じがするところに風情があっていいですよね.

参考文献

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?