Gemma ve LangChain'i kullanmaya başlama

ai.google.dev adresinde görüntüleme Google Colab'da çalıştırma Kaynağı GitHub'da görüntüleyin

Bu eğitimde, Google Cloud'da veya Colab ortamınızda Gemma ve LangChain'i nasıl kullanmaya başlayacağınız gösterilmektedir. Gemma, Gemini modellerini oluşturmak için kullanılan aynı araştırma ve teknolojiden oluşturulmuş, hafif ve son teknoloji açık modellerden oluşan bir ailedir. LangChain, dil modelleriyle desteklenen bağlama duyarlı uygulamalar oluşturmak ve dağıtmak için kullanılan bir çerçevedir.

Gemma'yı Google Cloud'da çalıştırma

langchain-google-vertexai paketi, Google Cloud modelleriyle LangChain entegrasyonu sağlar.

Bağımlıları yükleme

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

Kimliği doğrula

Colab Enterprise kullanmıyorsanız kimlik doğrulamanız gerekir.

from google.colab import auth
auth.authenticate_user()

Modeli dağıtma

Vertex AI, yapay zeka modellerini ve uygulamalarını eğitmek ve dağıtmak için kullanılan bir platformdur. Model Bahçesi, Google Cloud Console'da keşfedebileceğiniz, özel olarak seçilmiş bir model koleksiyonudur.

Gemma'yı dağıtmak için Vertex AI için Model Bahçesi'nde modeli açın ve aşağıdaki adımları tamamlayın:

  1. Dağıt'ı seçin.
  2. Dağıtım formu alanlarında istediğiniz değişiklikleri yapın veya varsayılan ayarları kabul ediyorsanız alanları olduğu gibi bırakın. Daha sonra ihtiyacınız olacak aşağıdaki alanları not edin:
    • Uç nokta adı (ör. google_gemma-7b-it-mg-one-click-deploy)
    • Bölge (örneğin, us-west1)
  3. Modeli Vertex AI'a dağıtmak için Dağıt'ı seçin. Dağıtımın tamamlanması birkaç dakika sürer.

Uç nokta hazır olduğunda proje kimliğini, uç nokta kimliğini ve konumunu kopyalayıp parametre olarak girin.

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

Modeli çalıştırma

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'yı çoklu katılımlı sohbet için de kullanabilirsiniz:

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'

Yanıtları tekrarları önlemek için son işlemden geçirebilirsiniz:

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'yı Kaggle'dan indirilen bir veri kümesiyle çalıştırma

Bu bölümde, Gemma'yı Kaggle'dan nasıl indireceğiniz ve ardından modeli nasıl çalıştıracağınız gösterilmektedir.

Bu bölümü tamamlamak için önce Gemma kurulumu bölümündeki kurulum talimatlarını tamamlamanız gerekir.

Ardından, Colab ortamınız için ortam değişkenlerini ayarlayacağınız bir sonraki bölüme geçin.

Ortam değişkenlerini ayarlama

KAGGLE_USERNAME ve KAGGLE_KEY için ortam değişkenlerini ayarlayın.

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')

Bağımlıları yükleme

# 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

Modeli çalıştırma

from langchain_google_vertexai import GemmaLocalKaggle

Keras arka ucunu belirtebilirsiniz (varsayılan olarak tensorflow'tür ancak jax veya torch olarak değiştirebilirsiniz).

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

Sohbet modelini çalıştırma

Yukarıdaki Google Cloud örneğinde olduğu gibi, çoklu turlu sohbet için Gemma'nın yerel dağıtımını kullanabilirsiniz. OOM hatalarını önlemek için dizüstü bilgisayarı yeniden başlatmanız ve GPU belleğinizi temizlemeniz gerekebilir:

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"

Birden fazla ifade içeren yanıtlardan kaçınmak için yanıtı son işleme tabi tutabilirsiniz:

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'yı Hugging Face indirme dosyasından çalıştırma

Kurulum

Kaggle gibi Hugging Face da modele erişmeden önce Gemma hükümler ve koşullarını kabul etmenizi zorunlu kılar. Hugging Face üzerinden Gemma'ya erişmek için Gemma model kartına gidin.

Ayrıca, okuma izinlerine sahip bir kullanıcı erişim jetonu almanız ve bunu aşağıya girmeniz gerekir.

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

Modeli çalıştırma

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

Yukarıdaki örneklerde olduğu gibi, çoklu turlu sohbet için Gemma'nın yerel dağıtımını kullanabilirsiniz. OOM hatalarını önlemek için dizüstü bilgisayarı yeniden başlatmanız ve GPU belleğinizi temizlemeniz gerekebilir:

Sohbet modelini çalıştırma

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<"

Önceki örneklerde olduğu gibi, yanıtı son işleme tabi tutabilirsiniz:

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'

Sırada ne var?