Wyświetl na ai.google.dev | Uruchom w Google Colab | Wyświetl źródło w GitHubie |
CodeGemma to rodzina lekkich, nowoczesnych modeli otwartych opartych na tych samych badaniach i technologii, które posłużyły do utworzenia modeli Gemini.
Modele CodeGemma są trenowane na ponad 500 miliardach tokenów, głównie kodu, przy użyciu o tej samej architekturze co rodzina modeli Gemma. Dzięki temu modele CodeGemma uzyskują najwyższą wydajność kodu zarówno podczas i generowania zadań, a jednocześnie rozumienia i rozumowania na dużą skalę.
CodeGemma ma 3 warianty:
- Wytrenowany model 7B z użyciem kodu
- Model kodu 7B dostrojony według instrukcji
- Model 2B wytrenowany specjalnie pod kątem uzupełniania kodu i generowania otwartego.
W tym przewodniku omawiamy korzystanie z modelu CodeGemma 2B w połączeniu z KerasNLP w celu uzupełniania kodu.
Konfiguracja
Dostęp do CodeGemma
Aby ukończyć ten samouczek, musisz najpierw wykonać instrukcje konfiguracji opisane na stronie konfiguracji Gemma. Z instrukcji konfiguracji Gemma dowiesz się, jak:
- Uzyskaj dostęp do Gemmy na kaggle.com.
- Wybierz środowisko wykonawcze Colab z wystarczającą ilością zasobów do uruchomienia modelu Gemma 2B.
- Wygeneruj i skonfiguruj nazwę użytkownika i klucz interfejsu API Kaggle.
Po zakończeniu konfiguracji Gemma przejdź do następnej sekcji, w której możesz ustawić zmienne środowiskowe dla środowiska Colab.
Wybierz środowisko wykonawcze
Aby dokończyć ten samouczek, musisz mieć środowisko wykonawcze Colab z wystarczającymi zasobami do uruchomienia modelu CodeGemma 2B. W takim przypadku możesz użyć GPU T4:
- W prawym górnym rogu okna Colab wybierz ▾ (Dodatkowe opcje połączenia).
- Kliknij Zmień typ środowiska wykonawczego.
- W sekcji Akcelerator sprzętowy wybierz GPU T4.
Skonfiguruj klucz interfejsu API
Aby używać Gemma, musisz podać swoją nazwę użytkownika Kaggle i klucz interfejsu API Kaggle.
Aby wygenerować klucz interfejsu API Kaggle, otwórz kartę Account (Konto) w profilu użytkownika Kaggle i wybierz Create New Token (Utwórz nowy token). Spowoduje to pobranie pliku kaggle.json
zawierającego dane logowania do interfejsu API.
W Colab wybierz Obiekty tajne (🔑) w panelu po lewej stronie i dodaj swoją nazwę użytkownika Kaggle i klucz interfejsu API Kaggle. Zapisz swoją nazwę użytkownika pod nazwą KAGGLE_USERNAME
, a klucz interfejsu API pod nazwą KAGGLE_KEY
.
Ustawianie zmiennych środowiskowych
Ustaw zmienne środowiskowe dla interfejsów KAGGLE_USERNAME
i KAGGLE_KEY
.
import os
from google.colab import userdata
os.environ["KAGGLE_USERNAME"] = userdata.get('KAGGLE_USERNAME')
os.environ["KAGGLE_KEY"] = userdata.get('KAGGLE_KEY')
Instalowanie zależności
pip install -q -U keras-nlp
Wybierz backend
Keras to wysokopoziomowy, wieloramowy interfejs API deep learning, który został zaprojektowany z myślą o łatwości obsługi. Keras 3 pozwala uruchamiać przepływy pracy w jednym z 3 backendów: TensorFlow, JAX lub PyTorch.
W tym samouczku skonfiguruj backend dla TensorFlow.
os.environ["KERAS_BACKEND"] = "tensorflow" # Or "jax" or "torch".
Importuj pakiety
Importuj Keras i KerasNLP.
import keras_nlp
import keras
# Run at half precision.
keras.config.set_floatx("bfloat16")
Wczytaj model
KerasNLP udostępnia implementacje wielu popularnych architektur modeli. W tym samouczku utworzysz model przy użyciu GemmaCausalLM
– kompleksowego modelu Gemma do modelowania przyczynowo-językowego. Przypadkowy model językowy przewiduje kolejny token na podstawie poprzednich tokenów.
Utwórz model za pomocą metody from_preset
:
gemma_lm = keras_nlp.models.GemmaCausalLM.from_preset("code_gemma_2b_en")
gemma_lm.summary()
Downloading from https://www.kaggle.com/api/v1/models/keras/codegemma/keras/code_gemma_2b_en/1/download/config.json... 100%|██████████| 554/554 [00:00<00:00, 1.41MB/s] Downloading from https://www.kaggle.com/api/v1/models/keras/codegemma/keras/code_gemma_2b_en/1/download/model.weights.h5... 100%|██████████| 4.67G/4.67G [05:06<00:00, 16.4MB/s] Downloading from https://www.kaggle.com/api/v1/models/keras/codegemma/keras/code_gemma_2b_en/1/download/tokenizer.json... 100%|██████████| 401/401 [00:00<00:00, 382kB/s] Downloading from https://www.kaggle.com/api/v1/models/keras/codegemma/keras/code_gemma_2b_en/1/download/assets/tokenizer/vocabulary.spm... 100%|██████████| 4.04M/4.04M [00:01<00:00, 2.41MB/s]
Metoda from_preset
tworzy instancję modelu na podstawie gotowej architektury i wag. W powyższym kodzie ciąg code_gemma_2b_en
określa gotową architekturę – model CodeGemma z 2 miliardami parametrów.
Uzupełnianie kodu w środku
W tym przykładzie korzystamy z dostępnej w CodeGemmy funkcji „fill-in-the-middle” (FIM) w celu dokończenia kodu na podstawie otaczającego je kontekstu. Jest to szczególnie przydatne w edytorach kodu służących do wstawiania kodu w miejscu, w którym kursor tekstowy jest umieszczony względem otaczającego go kodu (przed kursorem i za nim).
CodeGemma umożliwia korzystanie z 4 tokenów definiowanych przez użytkownika – 3 dla FIM i <|file_separator|>
do obsługi kontekstu obejmującego wiele plików. Użyj ich do zdefiniowania stałych.
BEFORE_CURSOR = "<|fim_prefix|>"
AFTER_CURSOR = "<|fim_suffix|>"
AT_CURSOR = "<|fim_middle|>"
FILE_SEPARATOR = "<|file_separator|>"
Zdefiniuj tokeny zatrzymania dla modelu.
END_TOKEN = gemma_lm.preprocessor.tokenizer.end_token
stop_tokens = (BEFORE_CURSOR, AFTER_CURSOR, AT_CURSOR, FILE_SEPARATOR, END_TOKEN)
stop_token_ids = tuple(gemma_lm.preprocessor.tokenizer.token_to_id(x) for x in stop_tokens)
Sformatuj prompt pod kątem uzupełnienia kodu. Uwaga:
- Między tokenami FIM a prefiksem i sufiksem nie powinno być spacji
- Środkowy token FIM powinien znajdować się na końcu, aby przygotować model do dalszego wypełniania.
- Prefiks lub sufiks może być pusty w zależności od tego, gdzie obecnie znajduje się kursor w pliku, lub od tego, jak dużo kontekstu chcesz przekazać modelowi
Sformatuj prompt za pomocą funkcji pomocniczej.
def format_completion_prompt(before, after):
return f"{BEFORE_CURSOR}{before}{AFTER_CURSOR}{after}{AT_CURSOR}"
before = "import "
after = """if __name__ == "__main__":\n sys.exit(0)"""
prompt = format_completion_prompt(before, after)
print(prompt)
<|fim_prefix|>import <|fim_suffix|>if __name__ == "__main__": sys.exit(0)<|fim_middle|>
Uruchom prompt. Zalecamy strumieniowanie tokenów odpowiedzi. Zatrzymaj transmisję po napotkaniu tokena zdefiniowanego przez użytkownika lub tokena końca tury lub sesji, aby uzyskać uzupełnienie kodu.
gemma_lm.generate(prompt, stop_token_ids=stop_token_ids, max_length=128)
'<|fim_prefix|>import <|fim_suffix|>if __name__ == "__main__":\n sys.exit(0)<|fim_middle|>sys\n<|file_separator|>'
Model udostępnia sys
jako sugerowane uzupełnienie kodu.
Podsumowanie
W tym samouczku omawialiśmy korzystanie z CodeGemma do uzupełniania kodu na podstawie otaczającego je kontekstu. Następnie przejrzyj notatnik „AI Assist Programming with CodeGemma i KerasNLP”, w którym znajdziesz więcej przykładów korzystania z CodeGemma.
Na karcie z modelem CodeGemma znajdziesz też dane techniczne modeli.