بدء العمل مع Gemma وLangChain

العرض على ai.google.dev التشغيل في Google Colab الاطّلاع على المصدر على GitHub

يوضِّح لك هذا البرنامج التعليمي كيفية بدء استخدام Gemma وLangChain، في استخدام Google Cloud أو في بيئة Colab. جيما هي عائلة من النماذج المفتوحة الحديثة وخفيفة الوزن والتي تم بناؤها من نفس الأبحاث والتكنولوجيا المستخدمة لإنشاء نماذج Gemini. LangChain هي إطار عمل لإنشاء ونشر تطبيقات الوعي بالسياق المستندة إلى نماذج لغوية.

تشغيل Gemma في Google Cloud

توفّر حزمة langchain-google-vertexai إمكانية دمج LangChain مع نماذج Google Cloud.

تثبيت التبعيات

pip install --upgrade -q langchain langchain-google-vertexai

مصادقة

ما لم تكن تستخدم Colab Enterprise، ستحتاج إلى المصادقة.

from google.colab import auth
auth.authenticate_user()

نشر النموذج

Vertex AI هو منصة لتدريب نماذج وتطبيقات الذكاء الاصطناعي ونشرها. النماذج في الحديقة هي مجموعة مُنظَّمة من النماذج التي يمكنك استكشافها في وحدة تحكُّم Google Cloud.

لنشر Gemma، افتح النموذج في Model Garden لـ Vertex AI وأكمل الخطوات التالية:

  1. اختَر نشر.
  2. أجرِ أي تغييرات مطلوبة على حقول نموذج النشر، أو اتركها كما هي إذا كنت توافق على الإعدادات الافتراضية. دوِّن الحقول التالية التي ستحتاج إليها لاحقًا:
    • اسم نقطة النهاية (مثلاً، google_gemma-7b-it-mg-one-click-deploy)
    • المنطقة (مثلاً، us-west1)
  3. اختَر نشر لنشر النموذج في Vertex AI. ستستغرق عملية النشر بضع دقائق.

عندما تكون نقطة النهاية جاهزة، انسخ رقم تعريف المشروع ورقم تعريف نقطة النهاية والموقع الجغرافي، وأدخِلها كمَعلمات.

# @title Basic parameters
project: str = ""  # @param {type:"string"}
endpoint_id: str = ""  # @param {type:"string"}
location: str = "" # @param {type:"string"}

تشغيل النموذج

from langchain_google_vertexai import GemmaVertexAIModelGarden, GemmaChatVertexAIModelGarden

llm = GemmaVertexAIModelGarden(
    endpoint_id=endpoint_id,
    project=project,
    location=location,
)

output = llm.invoke("What is the meaning of life?")
print(output)
Prompt:
What is the meaning of life?
Output:
Life is a complex and multifaceted phenomenon that has fascinated philosophers, scientists, and

يمكنك أيضًا استخدام Gemma لإجراء محادثات متعددة الأدوار:

from langchain_core.messages import (
    HumanMessage
)

llm = GemmaChatVertexAIModelGarden(
    endpoint_id=endpoint_id,
    project=project,
    location=location,
)

message1 = HumanMessage(content="How much is 2+2?")
answer1 = llm.invoke([message1])
print(answer1)

message2 = HumanMessage(content="How much is 3+3?")
answer2 = llm.invoke([message1, answer1, message2])

print(answer2)
content='Prompt:\n<start_of_turn>user\nHow much is 2+2?<end_of_turn>\n<start_of_turn>model\nOutput:\nSure, the answer is 4.\n\n2 + 2 = 4'
content='Prompt:\n<start_of_turn>user\nHow much is 2+2?<end_of_turn>\n<start_of_turn>model\nPrompt:\n<start_of_turn>user\nHow much is 2+2?<end_of_turn>\n<start_of_turn>model\nOutput:\nSure, the answer is 4.\n\n2 + 2 = 4<end_of_turn>\n<start_of_turn>user\nHow much is 3+3?<end_of_turn>\n<start_of_turn>model\nOutput:\nSure, the answer is 6.\n\n3 + 3 = 6'

يمكنك اتّباع الإجراءات التالية بعد معالجة الردود لتجنُّب التكرار:

answer1 = llm.invoke([message1], parse_response=True)
print(answer1)

answer2 = llm.invoke([message1, answer1, message2], parse_response=True)

print(answer2)
content='Output:\nSure, here is the answer:\n\n2 + 2 = 4'
content='Output:\nSure, here is the answer:\n\n3 + 3 = 6<'

تشغيل Gemma من تنزيل Kaggle

يوضح لك هذا القسم كيفية تنزيل Gemma من Kaggle ثم تشغيل النموذج.

لإكمال هذا القسم، عليك أولاً إكمال تعليمات الإعداد في إعداد Gemma.

ثم انتقل إلى القسم التالي، حيث يمكنك تعيين متغيرات البيئة لبيئة Colab.

ضبط متغيرات البيئة

اضبط متغيّرات البيئة للسمة KAGGLE_USERNAME وKAGGLE_KEY.

import os
from google.colab import userdata

# Note: `userdata.get` is a Colab API. If you're not using Colab, set the env
# vars as appropriate for your system.
os.environ["KAGGLE_USERNAME"] = userdata.get('KAGGLE_USERNAME')
os.environ["KAGGLE_KEY"] = userdata.get('KAGGLE_KEY')

تثبيت التبعيات

# Install Keras 3 last. See https://keras.io/getting_started/ for more details.
pip install -q -U keras-nlp
pip install -q -U keras>=3

تشغيل النموذج

from langchain_google_vertexai import GemmaLocalKaggle

يمكنك تحديد خلفية Keras (هي tensorflow تلقائيًا، ولكن يمكنك تغييرها إلى jax أو torch).

# @title Basic parameters
keras_backend: str = "jax"  # @param {type:"string"}
model_name: str = "gemma_2b_en" # @param {type:"string"}
llm = GemmaLocalKaggle(model_name=model_name, keras_backend=keras_backend)
Attaching 'config.json' from model 'keras/gemma/keras/gemma_2b_en/2' to your Colab notebook...
Attaching 'config.json' from model 'keras/gemma/keras/gemma_2b_en/2' to your Colab notebook...
Attaching 'model.weights.h5' from model 'keras/gemma/keras/gemma_2b_en/2' to your Colab notebook...
Attaching 'tokenizer.json' from model 'keras/gemma/keras/gemma_2b_en/2' to your Colab notebook...
Attaching 'assets/tokenizer/vocabulary.spm' from model 'keras/gemma/keras/gemma_2b_en/2' to your Colab notebook...
output = llm.invoke("What is the meaning of life?", max_tokens=30)
print(output)
What is the meaning of life?

The question is one of the most important questions in the world.

It’s the question that has

تشغيل نموذج المحادثة

كما هو الحال في مثال Google Cloud أعلاه، يمكنك استخدام النشر المحلي لـ Gemma لإجراء محادثات متعدّدة الأدوار. قد تحتاج إلى إعادة تشغيل دفتر الملاحظات وتنظيف ذاكرة وحدة معالجة الرسومات لتجنب أخطاء OOM:

from langchain_google_vertexai import GemmaChatLocalKaggle
# @title Basic parameters
keras_backend: str = "jax"  # @param {type:"string"}
model_name: str = "gemma_2b_en" # @param {type:"string"}
llm = GemmaChatLocalKaggle(model_name=model_name, keras_backend=keras_backend)
Attaching 'config.json' from model 'keras/gemma/keras/gemma_2b_en/2' to your Colab notebook...
Attaching 'config.json' from model 'keras/gemma/keras/gemma_2b_en/2' to your Colab notebook...
Attaching 'model.weights.h5' from model 'keras/gemma/keras/gemma_2b_en/2' to your Colab notebook...
Attaching 'tokenizer.json' from model 'keras/gemma/keras/gemma_2b_en/2' to your Colab notebook...
Attaching 'assets/tokenizer/vocabulary.spm' from model 'keras/gemma/keras/gemma_2b_en/2' to your Colab notebook...
from langchain_core.messages import (
    HumanMessage
)

message1 = HumanMessage(content="Hi! Who are you?")
answer1 = llm.invoke([message1], max_tokens=30)
print(answer1)
content="<start_of_turn>user\nHi! Who are you?<end_of_turn>\n<start_of_turn>model\nI'm a model.\n Tampoco\nI'm a model."
message2 = HumanMessage(content="What can you help me with?")
answer2 = llm.invoke([message1, answer1, message2], max_tokens=60)

print(answer2)
content="<start_of_turn>user\nHi! Who are you?<end_of_turn>\n<start_of_turn>model\n<start_of_turn>user\nHi! Who are you?<end_of_turn>\n<start_of_turn>model\nI'm a model.\n Tampoco\nI'm a model.<end_of_turn>\n<start_of_turn>user\nWhat can you help me with?<end_of_turn>\n<start_of_turn>model"

يمكنك معالجة الردّ بعد إكماله إذا أردت تجنُّب عبارات منعطفات متعددة:

answer1 = llm.invoke([message1], max_tokens=30, parse_response=True)
print(answer1)

answer2 = llm.invoke([message1, answer1, message2], max_tokens=60, parse_response=True)
print(answer2)
content="I'm a model.\n Tampoco\nI'm a model."
content='I can help you with your modeling.\n Tampoco\nI can'

تنزيل صورة لـ "جيما" من خلال تنزيل محتوى Hugging Face

ضبط إعدادات الجهاز

مثل Kaggle، يتطلب Hugging Face أن تقبل أحكام وشروط Gemma قبل الوصول إلى النموذج. للوصول إلى "جيما" من خلال Hugging Face، انتقِل إلى بطاقة نموذج "جيما".

يجب أيضًا الحصول على رمز دخول للمستخدم مع أذونات القراءة، والتي يمكنك إدخالها أدناه.

# @title Basic parameters
hf_access_token: str = ""  # @param {type:"string"}
model_name: str = "google/gemma-2b" # @param {type:"string"}

تشغيل النموذج

from langchain_google_vertexai import GemmaLocalHF, GemmaChatLocalHF
llm = GemmaLocalHF(model_name="google/gemma-2b", hf_access_token=hf_access_token)
tokenizer_config.json:   0%|          | 0.00/1.11k [00:00<?, ?B/s]
tokenizer.model:   0%|          | 0.00/4.24M [00:00<?, ?B/s]
tokenizer.json:   0%|          | 0.00/17.5M [00:00<?, ?B/s]
special_tokens_map.json:   0%|          | 0.00/555 [00:00<?, ?B/s]
config.json:   0%|          | 0.00/627 [00:00<?, ?B/s]
model.safetensors.index.json:   0%|          | 0.00/13.5k [00:00<?, ?B/s]
Downloading shards:   0%|          | 0/2 [00:00<?, ?it/s]
model-00001-of-00002.safetensors:   0%|          | 0.00/4.95G [00:00<?, ?B/s]
model-00002-of-00002.safetensors:   0%|          | 0.00/67.1M [00:00<?, ?B/s]
Loading checkpoint shards:   0%|          | 0/2 [00:00<?, ?it/s]
generation_config.json:   0%|          | 0.00/137 [00:00<?, ?B/s]
output = llm.invoke("What is the meaning of life?", max_tokens=50)
print(output)
What is the meaning of life?

The question is one of the most important questions in the world.

It’s the question that has been asked by philosophers, theologians, and scientists for centuries.

And it’s the question that

كما في الأمثلة أعلاه، يمكنك استخدام النشر المحلي لـ "جيما" لإجراء محادثة متعدّدة الأدوار. قد تحتاج إلى إعادة تشغيل دفتر الملاحظات وتنظيف ذاكرة وحدة معالجة الرسومات لتجنب أخطاء OOM:

تشغيل نموذج المحادثة

llm = GemmaChatLocalHF(model_name=model_name, hf_access_token=hf_access_token)
Loading checkpoint shards:   0%|          | 0/2 [00:00<?, ?it/s]
from langchain_core.messages import (
    HumanMessage
)

message1 = HumanMessage(content="Hi! Who are you?")
answer1 = llm.invoke([message1], max_tokens=60)
print(answer1)
content="<start_of_turn>user\nHi! Who are you?<end_of_turn>\n<start_of_turn>model\nI'm a model.\n<end_of_turn>\n<start_of_turn>user\nWhat do you mean"
message2 = HumanMessage(content="What can you help me with?")
answer2 = llm.invoke([message1, answer1, message2], max_tokens=140)

print(answer2)
content="<start_of_turn>user\nHi! Who are you?<end_of_turn>\n<start_of_turn>model\n<start_of_turn>user\nHi! Who are you?<end_of_turn>\n<start_of_turn>model\nI'm a model.\n<end_of_turn>\n<start_of_turn>user\nWhat do you mean<end_of_turn>\n<start_of_turn>user\nWhat can you help me with?<end_of_turn>\n<start_of_turn>model\nI can help you with anything.\n<"

كما في الأمثلة السابقة، يمكنك بعد معالجة الردّ:

answer1 = llm.invoke([message1], max_tokens=60, parse_response=True)
print(answer1)

answer2 = llm.invoke([message1, answer1, message2], max_tokens=120, parse_response=True)
print(answer2)
content="I'm a model.\n<end_of_turn>\n"
content='I can help you with anything.\n<end_of_turn>\n<end_of_turn>\n'

الخطوات التالية