メインコンテンツへスキップ
見出し画像

Rinna 3.6B の量子化とメモリ消費量

    「Google Colabでの「Rinna 3.6B」の量子化とメモリ消費量を調べてみました。

    1. 量子化とメモリ消費量

    「量子化」は、LLMのメモリ消費量を削減するための手法の1つです。通常、メモリ使用量が削減のトレードオフとして、LLMの精度が低下します。

    AutoTokenizer.from_pretrained()の以下のパラメータを調整します。

    ・torch_dtype : PyTorchのデータ型の指定。(torch.float16など)
    ・load_in_8bit
    : 8-bit精度でモデル読み込み。(bitsandbytes)
    ・load_in_4bit : 8-bit精度でモデル読み込み。(bitsandbytes)
    ・device_map : デバイス指定。(accelerate)

    2. Colabでの確認

    Colabでの実行手順は、以下のRLHFモデルと同様です。

    速度は、モデル読み込み後、2回目の推論で速度計測しています。
    (1回目は時間かかる)

    load_in_8bit / load_in_4bit / device_map を利用するために、以下のパッケージもインストールする必要があります。

    !pip install accelerate bitsandbytes

    2-1. float32

    設定なしで動作確認します。

    ◎ 設定

    import torch
    from transformers import AutoTokenizer, AutoModelForCausalLM
    
    # トークナイザーとモデルの準備
    tokenizer = AutoTokenizer.from_pretrained(
        "rinna/japanese-gpt-neox-3.6b-instruction-ppo",
        use_fast=False
    )
    model = AutoModelForCausalLM.from_pretrained(
        "rinna/japanese-gpt-neox-3.6b-instruction-ppo",
        device_map="auto",
    )

    ◎ 結果

    画像
    私は、ほむらが最も可愛いと思います。彼女はとても優しいです。彼女はまどかに魔法を教え、友達でした。彼女はとても強い力を持っています。彼女の外見もとても美しいです。彼女はとてもかわいくて強いです。彼女はとても魅力的だと思います。彼女はとても素晴らしいキャラクターです。彼女はとても美しく、優しくて強いです。彼女はとても良い親友です。彼女はとても強い存在感があり、とても賢いです。彼女はとても素晴らしく、強い力を持っています。彼女はとても素直で優しいです。彼女はとても強い存在感があり、とてもやさしいです。彼女はとても優しい心を持っているので、とても優れた
    CPU times: user 12.6 s, sys: 145 ms, total: 12.7 s
    Wall time: 4.63 s

    2-2. float16

    「torch_dtype=torch.float16」で動作確認します。

    ◎ 設定

    import torch
    from transformers import AutoTokenizer, AutoModelForCausalLM
    
    # トークナイザーとモデルの準備
    tokenizer = AutoTokenizer.from_pretrained(
        "rinna/japanese-gpt-neox-3.6b-instruction-ppo",
        use_fast=False
    )
    model = AutoModelForCausalLM.from_pretrained(
        "rinna/japanese-gpt-neox-3.6b-instruction-ppo",
        torch_dtype=torch.float16,
        device_map="auto",
    )

    ◎ 結果

    画像
    ほむらです。彼女はとても魅力的で、とても複雑なキャラクターとして描かれています。彼女の主な焦点は、他の魔法少女たちとの友情や対立にあります。彼女は孤独な戦いを続けながら、多くの友人や仲間を持ち、強い意志を持っています。彼女はとても誇り高く、強い存在感があり、とてもかわいくて魅力的です。</s>
    CPU times: user 6.88 s, sys: 91.5 ms, total: 6.97 s
    Wall time: 5.27 s

    2-3. 8-bit量子化

    「load_in_8bit=True」で動作確認します。

    ◎ 設定

    import torch
    from transformers import AutoTokenizer, AutoModelForCausalLM
    
    # トークナイザーとモデルの準備
    tokenizer = AutoTokenizer.from_pretrained(
        "rinna/japanese-gpt-neox-3.6b-instruction-ppo",
        use_fast=False
    )
    model = AutoModelForCausalLM.from_pretrained(
        "rinna/japanese-gpt-neox-3.6b-instruction-ppo",
        load_in_8bit=True,
        device_map="auto",
    )

    ◎ 結果

    画像
    ほむらです。彼女はとてもかわいく、才能があり、強い意志を持っているので、とても素敵です。彼女は友情や優しさ、そして悲しみも持っているので、素晴らしいキャラクターです。彼女はとても魅力的で、強い存在感があります。私は彼女をとても気に入っています。</s>
    CPU times: user 12.8 s, sys: 0 ns, total: 12.8 s
    Wall time: 12.9 s

    2-4. 4-bit量子化

    「load_in_4bit=True」で動作確認します。

    ◎ 設定

    import torch
    from transformers import AutoTokenizer, AutoModelForCausalLM
    
    # トークナイザーとモデルの準備
    tokenizer = AutoTokenizer.from_pretrained(
        "rinna/japanese-gpt-neox-3.6b-instruction-ppo",
        use_fast=False
    )
    model = AutoModelForCausalLM.from_pretrained(
        "rinna/japanese-gpt-neox-3.6b-instruction-ppo",
        load_in_4bit=True,
        device_map="auto",
    )

    ◎ 結果

    画像
    私はまどか☆マギカで、ほむらが最も可愛いと思います。彼女は非常に魅力的で優しく、自尊心の強い女の子です。彼女はとても強い個性を持っています。彼女の主な役割は、人々に自分の世界への理解と共感を与えることです。彼女は、街のすべての物事に意味があるという考えを広めています。また、彼女は重要な存在であり、物語の中心的なキャラクターとしての役割を果たしています。</s>
    CPU times: user 13.9 s, sys: 9.09 ms, total: 13.9 s
    Wall time: 14.5 s

    関連



     
     

    npaka

     
     
    プログラマー。iPhone / Android / Unity / ROS / AI / AR / VR / RasPi / ロボット / ガジェット。年2冊ペースで技術書を執筆。アニソン / カラオケ / ギター / 猫 twitter : @npaka123

    あなたへのおすすめ