Slide 1

Slide 1 text

LLMのオープンソース化とDatabricks 2023 / 04 / 25 阿部 直矢 @ Databricks LLM(GPT, PaLM等) with MLOps LT大会!!!

Slide 2

Slide 2 text

自己紹介 - 阿部 直矢 - ● Databricks の Solutions Architect (プリセー ルス) として活動中。 ● データレイクハウスを使ったMLOps基盤の提 案活動。データエンジニアリングも。 ● ジャンル不問でマンガが大好き、電子書籍だ けで3,000冊以上を購入。常に未読マンガのス トックが無いと落ち着かない病。

Slide 3

Slide 3 text

このLTで伝えたいメッセージ LLM を Open Source で 活用できる環境が整ってきている ● オープンな命令追従型LLM「Dolly」 ● MLflowでLLMの管理 ● SparkでLLMのワークロードをスケールアウト

Slide 4

Slide 4 text

ChatGPTの登場で LLMが急激にビジネス現場へ浸透中 ただ、場合によってはビジネスでの実用化に課題もある

Slide 5

Slide 5 text

命令追従型LLM を実用化する上での課題 ● State-of-the-art なモデルたち(例: GPT-4, PaLM 等)はAPI越しに利用するSaaS として提供されており、自社環境にデプロイできない ○ セキュリティ上の懸念 ○ カスタマイズ性が限定的 ● 自社環境にデプロイ可能なLLaMAベースのモデルたち(例: LLaMA, Alpaca, Vicuna, GPT4ALL 等)はライセンスの問題で学術的な用途に限定されている ○ ビジネスの現場で商用利用することができない

Slide 6

Slide 6 text

LLMの完全なオープンソース化を目指す動き ● Cerebras-GPT ○ Cerebrasが開発、OSS化 ○ 今年 3/28 にリリース ○ 独自モデル。命令追従型のタスク用にはチューニングされていない ● Open Assistant ○ LAION-AIが主導、OSSとして開発中 ○ EleutherAI Pythia ベース (LLaMAベースもあり)

Slide 7

Slide 7 text

LLMの完全なオープンソース化を目指す動き ● Cerebras-GPT ○ Cerebrasが開発、OSS化 ○ 今年 3/28 にリリース ○ 独自モデル。命令追従型のタスク用にはチューニングされていない ● Open Assistant ○ LAION-AIが主導、OSSとして開発中 ○ EleutherAI Pythia ベース (LLaMAベースもあり) ● Dolly ○ Databricksが開発、OSS化。 ○ 今年 3/24に1.0リリース、4/12 に 2.0リリース ○ EleutherAI Pythia ベース ○ 命令追従の能力を持った、世界初のオープンソースLLM 弊社 Databricks で、完全オープ ンソースの命令追従型 LLMをリ リースしました!

Slide 8

Slide 8 text

どのように商用利用可能にしたか - Dolly の系譜 - LLaMA Alpaca by Meta by Stanford by OpenAI GPT-3.5で生成 データセット Dolly独自 データセット Pythia by EleutherAI Dolly 1.0 by Databricks by Databricks Dolly 2.0 by Databricks ライセンスで商用利用禁止 商用利用禁止 商用利用可能 商用利用可能

Slide 9

Slide 9 text

Dollyのデータセットは全てDatabricks社員の手作り ● 約5,000名の社員が1週間かけて、15,000件のデータセットをコツコツと蓄積 ● Open Q&A、Closed Q&A、Wikipediaからの情報抽出 & 要約、ブレインストーミング、分類、 クリエイティブな文章生成 といったカテゴリを設置 ● 社内で投稿数を競うリーダーボードを公開し、上位者には報奨を出すことでモチベーションを喚 起! ● ChatGPT等によるデータ生成は行わず、全て社員自身が考えたオリジナル文章のみで構成し ているため、とても人間らしい高品質なデータセットが完成

Slide 10

Slide 10 text

回答の品質はどうか? サンプル A: ジャック・バウアーは、世界中の深刻なテロ攻撃を解決する「荒野のスキル」 と「24時間の健康」で有名なテロ対策エージェントです。彼は政府によって、 人々の命が危険にさらされているすべての危険な状況に派遣されています。 ジャック・バウアーには大家族がいて、 3 人の姉妹と 3 人の兄弟がいます。彼 の姉妹はマデリーン、キンバリー、アレックスです。彼の兄弟はイアン、クリスト ファー、ケビンです。 Q: ジャック・バウアーについて説明してください。

Slide 11

Slide 11 text

Dolly 2.0 で何を得た(得られる)か? ● 命令追従型のタスク(例:ブレインストーミング、要約 等)に対応した、無償かつ商 用利用可能なモデルを提供すること(学習済みモデルがHagging Face上で公開) ● 制約無く自社のインフラ上にモデルをデプロイできるので、 ○ ファインチューニングを含む自由なカスタマイズが可能 ○ 自社の情報等を外部に渡さず、完全に閉じた環境でセキュリティを確保 ● モデルはパラメータ数が30億、60億、120億の3種類を用意。LLMとしてはかなりコ ンパクトであり、安価に運用可能。 ● LLMのオープンソース化の流れを加速できた。Dolly 発表後には、他のオープン LLMが増え続けている。(StableLM, h2ogpt)

Slide 12

Slide 12 text

モデルのオープン化だけではない

Slide 13

Slide 13 text

LLM の管理 - MLflow の 対応 - ● 先日 4/18 に MLflow 2.3 がリリース ● MLflowの新しいFlavorとして、以下が用意されました! ○ Hugging Face Transformers ○ LangChain ○ OpenAI

Slide 14

Slide 14 text

Hugging Face Transformers のモデルロギング import mlflow import transformers architecture = "databricks/dolly-v2-3b" dolly = transformers.pipeline(model=architecture, trust_remote_code=True) with mlflow.start_run(): model_info = mlflow.transformers.log_model( transformers_model=dolly, artifact_path="dolly3b", input_example="Hello, Dolly!", ) loaded_dolly = mlflow.transformers.load_model( model_info.model_uri, max_new_tokens=250, ) ● transformers をネイティブな形式 でロギング & ロードできる ● モデルを自分でファインチューニン グする場合の実験管理、モデルレ ジストリでの管理、デプロイが MLflowでやりやすくなる

Slide 15

Slide 15 text

LangChain (LLMChain) のモデルロギング from langchain import PromptTemplate, HuggingFaceHub, LLMChain template = """Translate everything you see after this into French: {input}""" prompt = PromptTemplate(template=template, input_variables=["input"]) llm_chain = LLMChain( prompt=prompt, llm=HuggingFaceHub( repo_id="google/flan-t5-small", model_kwargs={"temperature":0, "max_length":64} ), ) mlflow.langchain.log_model( lc_model=llm_chain, artifact_path="model", registered_model_name="english-to-french-chain-gpt-3.5-turbo-1") LLMChainをロギングするので、 Model + Prompt Templateをまとめて管理が 出来る ※ 現時点ではHuggingFaceHubとOpenAIの LLMChainのみ対応だが、今後に期待。

Slide 16

Slide 16 text

LLMの推論処理のスケールアウト ● 現在「LLM」と呼ばれているモデルは巨大であり、推論処理には時間 がかかる ● 比較的コンパクトなDollyの場合でも大体10〜30秒くらいはかかってい る印象(もちろんプロンプトとリソースに依存) 大量の推論を高速に回すには分散処理が不可欠 (例:大量の文書をバッチ処理で要約する場合とか)

Slide 17

Slide 17 text

Spark の UDF を使ったスケールアウト from pyspark.sql.functions import pandas_udf summarizer_pipeline = pipeline("summarization", model="t5-small", tokenizer="t5-small", num_beams=10) summarizer_broadcast = sc.broadcast(summarizer_pipeline) @pandas_udf('string') def summarize_review(reviews): pipe = summarizer_broadcast.value( ("summarize: " + reviews).to_list(), batch_size=8, truncation=True) return pd.Series([s['summary_text'] for s in pipe]) camera_reviews_df = spark.read.format("delta").load("/tmp/.../review/cleaned") display(camera_reviews_df .withColumn("summary", summarize_review("review_body")) .select("review_body", "summary") .limit(10)) Spark Clusterの複数のGPUワーカー ノードに処理を分散させ、大量の推論が 分散処理することができる

Slide 18

Slide 18 text

良かったところ まとめ ● 無償で商用利用可能なオープンソースLLMが出てきて、自社のインフラ上に デプロイできるので、 ○ ファインチューニングを含む自由なカスタマイズが可能 ○ 自社の情報等を外部に渡さず、セキュリティを確保できる ● MLflowがLangChain, transformersに対応したことで、LLMOpsがまた一歩 進化 ● 規模の大きい実際のユースケースでは、Sparkもうまく活用してスケーラビリ ティを確保する必要 すべて Open Source

Slide 19

Slide 19 text

まだ足りないと思うところ ● MLflowのLangChain用Flavorが現時点ではLLMChainの HuggingFaceHubとOpenAIだけなところ。 ○ HuggingFacePipelineに対応してくれれば、ローカルでファインチューニングした LLM + Prompt TemplateをLLMChain化し管理できる。 ○ 他のLLMChainやAgentのロギングへの対応が待たれる。 ● Dolly は Hugging Face上のInference APIがOFFになっているため、 LangChainのHuggingFaceHubを使ったLLMChain化ができない。 ● Dolly 含むオープンソースLLMの日本語対応 今後に期待!

Slide 20

Slide 20 text

日本語対応について Databricks Japan の同僚たちが奮闘中! https://qiita.com/taka_yayoi/items/e82af6a504dce3d0be1f

Slide 21

Slide 21 text

弊社のユーザーコミュニティも仲間を募集中です! JEDAI - The Data & AI Meetup (Databricks Japan のユーザー会) https://jedai.connpass.com/ 次回イベント 4/26 18:00 - https://jedai.connpass.com/event/278235/ つい昨日 1,100名 を達成しました!

Slide 22

Slide 22 text

ありがとうございました!