بدء العمل مع 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 هي منصة لتدريب ونشر نماذج الذكاء الاصطناعي وتطبيقاته. نماذج Garden هي مجموعة مُنظَّمة من النماذج التي يمكنك استكشافها في وحدة تحكُّم Google Cloud.

لنشر Gemma، افتح النموذج في Model Garden for 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'

تشغيل Gemma من تنزيل وجه معانق

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

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

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

# @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

كما في الأمثلة أعلاه، يمكنك استخدام نشر محلي لتطبيق Gemma لإجراء محادثة متعددة الأدوار. قد تحتاج إلى إعادة تشغيل دفتر الملاحظات وتنظيف ذاكرة وحدة معالجة الرسومات لتجنب أخطاء 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'

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