שימוש במודלים פתוחים של Gemma עם Dataflow

‫Gemma היא משפחה של מודלים קלים ומתקדמים בקוד פתוח, שמבוססים על מחקר וטכנולוגיה ששימשו ליצירת מודלים של Gemini. אתם יכולים להשתמש במודלים של Gemma בצינורות עיבוד נתונים של הסקת מסקנות ב-Apache Beam. המונח open weight (משקל פתוח) מציין שפרמטרים או משקלים שאומנו מראש של מודל פורסמו. לא מסופקים פרטים כמו מערך הנתונים המקורי, ארכיטקטורת המודל וקוד האימון.

תרחישים לדוגמה

אפשר להשתמש במודלים של Gemma עם Dataflow לניתוח סנטימנט. באמצעות Dataflow ומודלי Gemma, אפשר לעבד אירועים, כמו ביקורות של לקוחות, כשהם מגיעים. מריצים את הביקורות דרך המודל כדי לנתח אותן, ואז יוצרים המלצות. אפשר לשלב את Gemma עם Apache Beam כדי להשלים את תהליך העבודה הזה בצורה חלקה.

תמיכה ומגבלות

מודלים פתוחים של Gemma נתמכים ב-Apache Beam וב-Dataflow עם הדרישות הבאות:

  • האפשרות זמינה לצינורות (pipelines) של עיבוד נתונים באצווה ושל סטרימינג שמשתמשים בגרסה 2.46.0 ואילך של Apache Beam Python SDK.
  • משימות Dataflow חייבות להשתמש ב-Runner v2.
  • המשימות ב-Dataflow חייבות להשתמש ב-GPU. רשימה של סוגי GPU שנתמכים ב-Dataflow זמינה בקטע זמינות. מומלץ להשתמש בסוגי ה-GPU‏ T4 ו-L4.
  • צריך להוריד את המודל ולשמור אותו בפורמט הקובץ .keras.
  • מומלץ להשתמש בTensorFlow model handler, אבל זו לא חובה.

דרישות מוקדמות

  • גישה למודלים של Gemma דרך Kaggle.
  • ממלאים את טופס ההסכמה ומאשרים את התנאים וההגבלות.
  • מורידים את מודל Gemma. שומרים אותו בפורמט הקובץ .keras במיקום שאליו עבודת Dataflow יכולה לגשת, כמו קטגוריה של Cloud Storage. כשמציינים ערך למשתנה של נתיב המודל, צריך להשתמש בנתיב למיקום האחסון הזה.
  • כדי להריץ את המשימה ב-Dataflow, צריך ליצור אימג' מותאם אישית של קונטיינר. השלב הזה מאפשר להפעיל את צינור הנתונים באמצעות מעבדי GPU בשירות Dataflow.

שימוש ב-Gemma בצינור העיבוד

כדי להשתמש במודל Gemma בצינור Apache Beam, צריך לבצע את השלבים הבאים.

  1. בקוד Apache Beam, אחרי שמייבאים את התלות של צינור עיבוד הנתונים, כוללים נתיב למודל השמור:

    model_path = "MODEL_PATH"
    

    מחליפים את MODEL_PATH בנתיב שבו שמרתם את המודל שהורדתם. לדוגמה, אם שומרים את המודל בקטגוריה של Cloud Storage, הפורמט של הנתיב הוא gs://STORAGE_PATH/FILENAME.keras.

  2. ההטמעה של מודלי Gemma ב-Keras כוללת את השיטה generate() ליצירת טקסט על סמך הנחיה. כדי להעביר רכיבים ל-generate() method, משתמשים בפונקציית הסקה בהתאמה אישית.

    def gemma_inference_function(model, batch, inference_args, model_id):
      vectorized_batch = np.stack(batch, axis=0)
      # The only inference_arg expected here is a max_length parameter to
      # determine how many words are included in the output.
      predictions = model.generate(vectorized_batch, **inference_args)
      return utils._convert_to_result(batch, predictions, model_id)
    
  3. מריצים את צינור העיבוד ומציינים את הנתיב למודל המאומן. בדוגמה הזו נעשה שימוש ב-TensorFlow model handler.

    class FormatOutput(beam.DoFn):
      def process(self, element, *args, **kwargs):
        yield "Input: {input}, Output: {output}".format(input=element.example, output=element.inference)
    
    # Instantiate a NumPy array of string prompts for the model.
    examples = np.array(["Tell me the sentiment of the phrase 'I like pizza': "])
    # Specify the model handler, providing a path and the custom inference function.
    model_handler = TFModelHandlerNumpy(model_path, inference_fn=gemma_inference_function)
    with beam.Pipeline() as p:
      _ = (p | beam.Create(examples) # Create a PCollection of the prompts.
             | RunInference(model_handler, inference_args={'max_length': 32}) # Send the prompts to the model and get responses.
             | beam.ParDo(FormatOutput()) # Format the output.
             | beam.Map(print) # Print the formatted output.
      )
    

המאמרים הבאים