見出し画像

Meta社のLlama3の特徴とgroqを使ったチャットボットのコードを紹介

こんにちは、にゃんたです。

今回は、Meta社の最新言語モデル「Llama3」について、その特徴や注目ポイントを分かりやすくお伝えしつつ、実際にLlama3を使える Groqのサービスについても紹介していきます。


1. Llama3 の特徴

Llama3が登場

Llama3は、Meta社がリリースした大規模言語モデルです。 8B70Bという2つのサイズのモデルが公開されました。 ここでBはパラメータ数を表しており、70Bは700億のパラメータを持つモデルという意味です。

特に70Bモデルの性能が注目されており、Googleの最新モデルであるGemini Pro1.5に匹敵する能力を持つとされています。英語でのタスクにおいては、かなり高い精度が期待できそうです。

70BはGemini Pro1.5並みに強い

ただし現時点では、学習データの95%が英語テキストであるため、日本語での性能はまだ未知数です。 しかし、今後数か月以内にマルチモーダルや多言語対応のモデルがリリースされる予定とのこと。 私たち日本語ユーザーにとっても楽しみなニュースですね。

さらに現在Meta社は、GPT-4に匹敵する400Bという超大型のモデルを学習中だそうです。 その精度は、Anthropic社のClaude3の最上位モデル「Opus」に迫る勢いとのこと。 もしこの400Bモデルが一般公開されれば、言語モデル業界のゲームチェンジャーになるかもしれません。

Calude3のOpusに迫る勢い

2. Llama3 の注意点

ここで一点注意が必要なのは、Llama3は完全なオープンソースではないということです。 モデルは誰でもダウンロードして使用できますが、商用利用には条件があったり、派生モデルの配布にも制限があったりします。

Llama3の利用規約

例えばLlama3のモデルを派生させる場合は、モデルの名前の冒頭に「Llama3」と付ける必要があると書かれていますね。

この辺りは従来のオープンソースとは少し趣が異なるので、利用する際はライセンスをよく確認する必要がありそうです。

3. Groq のサービス概要

Llama3のようなモデルを動かすには膨大な計算リソースが必要ですが、現在Groqという会社がAPIを通じてLlama3の実行環境を無料で提供しています。

Llama3が無料で使えるgroqというサービス

Groqは独自開発のAIチップによって、最高クラスの速度と低価格を実現しているのが特徴です。 ユーザーはAPIを呼び出すだけで、簡単にLlama3を利用できます。

実際にGroqの性能を他社と比較してみると、その優位性が明らかになります。 下の図は、各社のAIサービスにおける推論速度と価格をプロットしたものです。

他社との比較

縦軸が速度、横軸が価格を表しており、グラフの左上にあるほど高速かつ安価であることを示しています。 Groqはダントツの性能を誇っており、同程度の価格帯であるDeepInfraと比べても数倍以上の速度を実現しています。

無料プランでも十分な性能を発揮できますが、大量のリクエストを送る場合は制限があるので注意が必要です。 具体的には、1分間に30リクエストまで、最大9,000トークンまでという制限があります。

RateLimitはサービス提供向けではない点に注意

ただ、この制限の範囲内でも、Llama3の性能をフルに体験できる十分な量だと思います。 今後、Llama3の400Bモデルが登場した際にも、Groqはその実行環境として最有力候補の一つになりそうですね。

4. Llama3とGroqを使ったチャットボット作成

最後に、Llama3とGroqを実際に使ってチャットボットを作成する手順をご紹介します。streamlitを使って簡単に動作できるので興味がある人は使ってみてください。

import os
from pathlib import Path

import streamlit as st
from dotenv import load_dotenv
from groq import Groq

load_dotenv(Path(__file__).parent / ".env")


class GroqAPI:
    def __init__(self, model_name: str):
        self.client = Groq(api_key=os.getenv("GROQ_API_KEY"))
        self.model_name = model_name

    def _response(self, message):
        return self.client.chat.completions.create(
            model=self.model_name,
            messages=message,
            temperature=0,
            max_tokens=4096,
            stream=True,
            stop=None,
        )

    def response_stream(self, message):
        for chunk in self._response(message):
            if chunk.choices[0].delta.content:
                yield chunk.choices[0].delta.content


class Message:
    system_prompt: str = (
        """あなたは愉快なAIです。ユーザの入力に全て日本語で返答を生成してください"""
    )

    def __init__(self):
        if "messages" not in st.session_state:
            st.session_state.messages = [
                {
                    "role": "system",
                    "content": self.system_prompt,
                }
            ]

    def add(self, role: str, content: str):
        st.session_state.messages.append({"role": role, "content": content})

    def display_chat_history(self):
        for message in st.session_state.messages:
            if message["role"] == "system":
                continue
            with st.chat_message(message["role"]):
                st.markdown(message["content"])

    def display_stream(self, generater):
        with st.chat_message("assistant"):
            return st.write_stream(generater)


class ModelSelector:
    def __init__(self):
        self.models = ["llama3-8b-8192", "llama3-70b-8192"]

    def select(self):
        with st.sidebar:
            st.sidebar.title("groq chat")
            return st.selectbox("", self.models)


def main():
    user_input = st.chat_input("何か入力してください")
    model = ModelSelector()
    selected_model = model.select()

    message = Message()

    if user_input:
        llm = GroqAPI(selected_model)

        message.add("user", user_input)
        message.display_chat_history()

        response = message.display_stream(
            generater=llm.response_stream(st.session_state.messages)
        )
        message.add("assistant", response)


if __name__ == "__main__":
    main()

5. まとめ

以上、Llama3とGroqについてお伝えしました。 ポイントをまとめると以下のようになります。

  • Llama3は高性能な言語モデルで、特に英語タスクで高い精度が期待できる

  • 今後数か月以内に多言語対応モデルや、GPT-4を上回る400Bモデルのリリースが予定されている

  • Llama3はオープンソースに近いが、完全なオープンソースではない

  • GroqはLlama3の実行環境を無料で提供しており、他社と比べて圧倒的なコストパフォーマンスを誇る

  • 現在Groqの無料プランで、Llama3を使ったチャットボットを簡単に作成可能

言語モデルの世界は日進月歩で進化していますが、今後も最新情報をキャッチアップしつつ、分かりやすく解説していきたいと思います!

最後まで読んでくださりありがとうございました😆

最後にLINE 公式を始めたので興味があったら見てみてください!
https://liff.line.me/2004040861-3Jvq4bAG
ChatGPT, Claude3のプロンプトテクをまとめたプレゼントを無料で配布中です!(キーワード「プロンプト」と入力してください)

この記事が気に入ったらサポートをしてみませんか?