GeekAlerts

جایی برای گیک‌ها

·

استفاده از مدل Jurassic 2 از AI21 Labs به عنوان یک مدل خارجی

استفاده از مدل Jurassic 2 از AI21 Labs به عنوان یک مدل خارجی

تا حالا به این فکر کردید که استفاده از مدل Jurassic 2 از AI21 Labs در اپن‌سرچ (OpenSearch) چطور میتونه باشه؟ حالا شما میتونید قدرت هوش مصنوعی مولد رو به برنامه‌های جستجوی خودتون بیارید. در این راهنما، ما شما رو قدم به قدم در این فرایند همراهی میکنیم.

در بخش اول این مجموعه، با مفهوم مدل‌ها در اپن‌سرچ آشنا شدید. این یک قابلیت مهمه که به شما اجازه میده از مدل‌های مبتنی بر هوش مصنوعی برای افزایش ارزش داده‌هاتون استفاده کنید، چه از مدل‌های از پیش آموزش دیده، چه سفارشی و چه مدل‌های خارجی.

در این آموزش، با یک مثال عملی به شما نشون میدم که چطور این کار رو انجام بدید. شما یک مدل رو که توسط سرویس Amazon Bedrock پشتیبانی میشه، مستقر میکنید. این سرویس، مدل Jurassic 2 از AI21 Labs رو به عنوان یک مدل در دسترس قرار میده. شما یک طرح اولیه (blueprint) برای کانکتور مدل خودتون میسازید، اون رو مستقر میکنید و حتی تغییر دادن کانکتور برای به‌روزرسانی تنظیماتش رو هم تمرین میکنید.

راه‌اندازی یک کلاستر توسعه

برای اینکه تمرکزتون حفظ بشه و درگیر مسائل جانبی نشید، این آموزش فرض میکنه که شما از یک کلاستر اپن‌سرچ محلی (local) استفاده میکنید. اما هر چیزی که اینجا یاد میگیرید رو میتونید بعدا در کلاسترهای سرویس Amazon OpenSearch هم به کار ببرید. برای راه‌اندازی یک کلاستر اپن‌سرچ محلی، از فایل Docker Compose موجود در این مخزن گیت‌هاب استفاده کنید.

  1. git clone https://github.com/build-on-aws/getting-started-with-opensearch-models
  2. cd getting-started-with-opensearch-models
  3. docker compose up -d

نکته: کاربرانی که از Docker Desktop استفاده میکنند، باید حداقل ۴ گیگابایت از حافظه میزبان (host) رو بهش اختصاص بدن. برای این کار میتونید Docker Desktop رو باز کنید و به بخش Settings → Resources برید.

با اجرای این دستورات، دو سرویس شروع به کار میکنند: یک نمونه opensearch و یک نمونه opensearch-dashboards. شما از نمونه اپن‌سرچ برای استقرار مدل و اجرای استنتاج‌ها (inferences) استفاده میکنید. و از نمونه اپن‌سرچ دشبردز، از قابلیت Developer Tools به عنوان یک محیط توسعه برای اجرای دستورات استفاده خواهید کرد. یادتون باشه که ممکنه چند دقیقه طول بکشه تا سرویس‌ها بالا بیان، چون داکر ممکنه نیاز داشته باشه اول ایمیج‌های اونها رو از مخازن دانلود کنه. این کلاستر اپن‌سرچ محلی طوری تنظیم شده که عمدا امنیت در اون غیرفعال باشه. با اینکه این کار برای محیط‌های توسعه مناسبه، اما یادتون باشه که این روش برای محیط‌های کاری واقعی (production) یک روش استاندارد و پیشنهادی نیست.

برای بررسی اینکه اپن‌سرچ بالا اومده و درست کار میکنه یا نه، میتونید مرورگرتون رو باز کنید و به آدرس زیر برید:

http://localhost:9200/_cluster/health

باید یک خروجی JSON با محتوای زیر ببینید:

{
  "cluster_name": "opensearch-cluster",
  "status": "green",
  "timed_out": false,
  "number_of_nodes": 1,
  "number_of_data_nodes": 1,
  "discovered_master": true,
  "discovered_cluster_manager": true,
  "active_primary_shards": 4,
  "active_shards": 4,
  "relocating_shards": 0,
  "initializing_shards": 0,
  "unassigned_shards": 0,
  "delayed_unassigned_shards": 0,
  "number_of_pending_tasks": 0,
  "number_of_in_flight_fetch": 0,
  "task_max_waiting_in_queue_millis": 0,
  "active_shards_percent_as_number": 100
}

اگه فیلد status مقدار green رو نشون بده، یعنی کلاستر اپن‌سرچ شما آماده به کاره. از اونجایی که اپن‌سرچ از فریمورک ML Commons استفاده میکنه، مهمه که مطمئن بشید همه چیز قبل از شروع ارسال تسک‌ها کاملا راه‌اندازی شده باشه. برای بررسی اینکه آیا پلاگین ML Commons Framework راه‌اندازی شده یا نه، به آدرس زیر در مرورگرتون برید:

http://localhost:9200/.plugins-ml-config

شما باید یک خروجی JSON با محتوای زیر ببینید:

{
  ".plugins-ml-config": {
    "aliases": {},
    "mappings": {
      "_meta": {
        "schema_version": 2
      },
      "properties": {
        "create_time": {
          "type": "date",
          "format": "strict_date_time||epoch_millis"
        },
        "master_key": {
          "type": "keyword"
        }
      }
    },
    "settings": {
      "index": {
        "replication": {
          "type": "DOCUMENT"
        },
        "number_of_shards": "1",
        "auto_expand_replicas": "0-1",
        "provided_name": ".plugins-ml-config",
        "creation_date": "1700085905030",
        "number_of_replicas": "0",
        "uuid": "EO8G2EzqTcepOT8F5BmKoA",
        "version": {
          "created": "136327827"
        }
      }
    }
  }
}

این خروجی به این معنیه که ایندکس داخلی .plugins-ml-config ساخته شده، که نشون میده پلاگین راه‌اندازی شده. این اتفاق باید نسبتا سریع بیفته؛ اما اگه به هر دلیلی این نتیجه رو فورا ندیدید، سعی کنید مرورگرتون رو رفرش کنید. اگه هنوز هم نمیتونید این محتوا رو ببینید، ممکنه مشکلی در کلاستر اپن‌سرچ شما وجود داشته باشه. برای جزئیات بیشتر، لاگ‌های کانتینر رو بررسی کنید.

حالا که مطمئن شدید همه چیز به درستی کار میکنه، میتونید کلاستر اپن‌سرچ خودتون رو برای قابلیت مدل‌ها آماده کنید. تنظیمات خاصی وجود داره که باید قبل از ادامه کار در کلاستر خودتون فعال کنید. به مرورگرتون برید و آدرس زیر رو باز کنید:

http://localhost:5601

این آدرس صفحه اصلی OpenSearch Dashboards رو باز میکنه. شما از قابلیت Developer Tools در اپن‌سرچ دشبردز برای اجرای مجموعه‌ای از فراخوانی‌های REST API روی اپن‌سرچ استفاده میکنید. البته میتونید از ابزار کلاینت خودتون هم برای اجرای این دستورات استفاده کنید، اما استفاده از Developer Tools قطعا کار شما رو راحت‌تر میکنه. برای دسترسی به این قابلیت، این مراحل رو دنبال کنید:

  1. روی دکمه Dev Tools کلیک کنید.
  2. وقتی ویرایشگر باز شد، دستور GET _cluster/health رو برای بررسی وضعیت کلاستر اپن‌سرچ امتحان کنید. برای اجرای دستور، خطی که دستور با اون شروع میشه رو انتخاب کنید و روی دکمه ▶️ (اجرا) کلیک کنید.

حالا دیگه همه چیز مهیاست. شما میتونید به راحتی دستورات رو روی کلاستر اپن‌سرچ خودتون اجرا کنید. قابلیت Developer Tools به شما اجازه میده دستورات رو export و import کنید. پس هر کاری که در این آموزش انجام میدید رو میتونید در یک فایل ذخیره کرده و بعدا در یک کلاستر اپن‌سرچ دیگه، مثل یک دامنه از سرویس Amazon OpenSearch، دوباره استفاده کنید.

حالا تنظیمات پایدار (persistent) زیر رو فعال کنید:

PUT /_cluster/settings
{
  "persistent": {
    "plugins.ml_commons.update_connector.enabled": true
  }
}

اجرای این دستور باید خروجی زیر رو تولید کنه:

{
  "acknowledged": true,
  "persistent": {
    "plugins": {
      "ml_commons": {
        "update_connector": {
          "enabled": "true"
        }
      }
    }
  },
  "transient": {}
}

در ادامه این آموزش، خواهید دید که بعد از استقرار مدل، نیاز به یک تغییر در طرح اولیه کانکتور (connector blueprint) که برای AI21 Labs Jurassic 2 ساخته شده، وجود داره. به طور پیش‌فرض، شما اجازه تغییر طرح‌های اولیه کانکتور رو ندارید. با اینکه این موضوع برای کلاسترهای واقعی (production) خوبه، اما در طول توسعه، ممکنه توسعه‌دهندگان یادگیری ماشین نیاز به ایجاد تغییراتی در طرح‌های اولیه کانکتور داشته باشن، پس باید اپن‌سرچ رو طوری تنظیم کنید که این امکان رو فراهم کنه. به همین دلیل، از تنظیم plugins.ml_commons.update_connector.enabled استفاده شد.

کلاستر اپن‌سرچ شما حالا آماده است. همه کارهایی که تا اینجا انجام شد برای این بود که بتونید کاری رو شروع کنید که این آموزش واقعا در مورد اونه: یاد دادن به شما که چطور مدل‌ها رو مستقر و تست کنید. بیایید در بخش‌های بعدی ببینیم این کار چطور انجام میشه.

ساخت یک گروه مدل (Model Group)

برای کار با مدل‌ها، هر مدل باید به یک گروه مدل تعلق داشته باشه. همونطور که در بخش اول این مجموعه یاد گرفتید، گروه‌های مدل مثل ظرف‌هایی برای مدل‌های مستقر شده عمل میکنن. این کار یک راه راحت برای پیدا کردن مدل‌های مرتبط به شما میده. بنابراین، قبل از استقرار یک مدل، باید اول یک گروه مدل بسازید، اگه از قبل وجود نداشته باشه. با دستور زیر یک گروه مدل جدید بسازید:

POST /_plugins/_ml/model_groups/_register
{
  "name": "amazon_bedrock_models",
  "description": "Model group for Amazon Bedrock models"
}

شما باید یک خروجی JSON با محتوای زیر ببینید:

{
  "model_group_id": "wiBt1YsBhjmsqc9XKPfL",
  "status": "CREATED"
}

لطفا مقدار فیلد model_group_id رو یادداشت کنید. وقتی بعدا مدل رو ثبت میکنید، باید مشخص کنید که مدل به کدوم گروه مدل تعلق داره. به عنوان یک راه جایگزین، میتونید با دستور زیر گروه مدل رو جستجو کنید:

GET _plugins/_ml/model_groups/_search
{
  "query": {
    "match": {
      "name": "amazon_bedrock_models"
    }
  }
}

ساخت یک طرح اولیه کانکتور (Connector Blueprint)

برای اینکه اپن‌سرچ بتونه استنتاج‌ها رو روی مدل‌هایی خارج از کلاستر اجرا کنه، باید یک کانکتور بسازید. کانکتورها بلوک‌های سازنده‌ای هستن که کلاستر اپن‌سرچ شما رو با سرویس‌های هوش مصنوعی مثل Amazon Bedrock یکپارچه میکنن. برای ساخت یک کانکتور، یک توسعه‌دهنده یادگیری ماشین باید اول یک طرح اولیه کانکتور بسازه. طرح‌های اولیه کانکتور مشخصات مربوط به نحوه برقراری ارتباط با سرویس هوش مصنوعی، نحوه پیاده‌سازی تعاملات با سرویس‌های هوش مصنوعی و همچنین نحوه مدیریت قرارداد API (API contract) از سمت مدل رو ارائه میدن.

برای ساخت یک طرح اولیه کانکتور برای Amazon Bedrock با استفاده از مدل پایه AI21 Labs Jurassic 2، دستور زیر رو اجرا کنید:

POST /_plugins/_ml/connectors/_create
{
  "name": "Amazon Bedrock",
  "description": "Connector for Amazon Bedrock (AI21 Labs Jurassic 2)",
  "version": 1,
  "protocol": "aws_sigv4",
  "credential": {
    "access_key": "<YOUR AWS ACCESS KEY>",
    "secret_key": "<YOUR AWS SECRET KEY>"
  },
  "parameters": {
    "region": "us-east-1",
    "service_name": "bedrock",
    "model_name": "ai21.j2-mid-v1"
  },
  "actions": [
    {
      "action_type": "predict",
      "method": "POST",
      "headers": {
        "content-type": "application/json"
      },
      "url": "https://bedrock-runtime.${parameters.region}.amazonaws.com/model/${parameters.model_name}/invoke",
      "request_body": "{\"prompt\":\"${parameters.inputs}\",\"maxTokens\":200,\"temperature\":0.7,\"topP\":1,\"stopSequences\":[],\"countPenalty\":{\"scale\":0},\"presencePenalty\":{\"scale\":0},\"frequencyPenalty\":{\"scale\":0}}"
    }
  ]
}

شما باید یک خروجی JSON با محتوای زیر ببینید:

{
  "connector_id": "wyB41YsBhjmsqc9X5_fW"
}

لطفا مقدار فیلد connector_id رو یادداشت کنید. وقتی بعدا مدل رو ثبت میکنید، باید مشخص کنید که مدل از کدوم طرح اولیه کانکتور باید استفاده کنه.

بیایید نگاهی دقیق‌تر به طرح اولیه کانکتور که ساختیم بندازیم.

در این ساختار JSON، فیلدهای protocol و credentials برای مشخص کردن نحوه احراز هویت اپن‌سرچ با Amazon Bedrock استفاده میشن. حتما یک کلید دسترسی (access key) و کلید مخفی (secret key) از یک کاربر یا نقش (role) در AWS رو وارد کنید که مجوز فراخوانی Amazon Bedrock رو داشته باشه. به عنوان یک راه جایگزین، میتونید یک فیلد دیگه به نام session_key رو هم در بخش credentials اضافه کنید تا در صورت نیاز از کلید نشست (session key) استفاده کنید.

در فیلد actions، شما تمام اطلاعاتی رو که اپن‌سرچ برای برقراری ارتباط با Amazon Bedrock و ارسال درخواست‌ها استفاده میکنه، ارائه دادید. توجه کنید که فیلد url از برخی مقادیری که در فیلد parameters با عبارت ${value} ارائه دادید، استفاده میکنه. این یک راه مفید برای استفاده مجدد از مقداریه که ممکنه چندین بار در سراسر پیکربندی طرح اولیه کانکتور تکرار بشه. در فیلد request_body، مقدار ارائه شده با مشخصات مدل پایه AI21 Labs Jurassic 2 مطابقت داره. دونستن این موضوع مهمه چون اگه تصمیم بگیرید از یک مدل پایه دیگه از Amazon Bedrock استفاده کنید، باید مقدار این فیلد رو متناسب با اون به‌روز کنید. یا حتی بهتر، میتونید یک طرح اولیه کانکتور دیگه در همون گروه مدل با یک پیکربندی متفاوت بسازید.

همچنین، توجه داشته باشید که اگه نیاز به جستجوی یک طرح اولیه کانکتور خاص با نامش داشتید، مثلا همون «Amazon Bedrock» که قبلا ساختیم، میتونید از جستجوی زیر استفاده کنید:

GET /_plugins/_ml/connectors/_search
{
  "query": {
    "match_phrase": {
      "name": "Amazon Bedrock"
    }
  }
}

این دستور به شما اجازه میده هر پیکربندی که برای طرح اولیه کانکتور انجام دادید رو بازبینی کنید. اپن‌سرچ به عنوان یک تکنولوژی مبتنی بر جستجو، به شما اجازه میده از جستجوهای داخلی پشتیبانی شده مثل Full-text queries برای پیدا کردن تقریبا هر چیزی که میخواید استفاده کنید.

ثبت و استقرار مدل

حالا که گروه مدل و طرح اولیه کانکتور رو ساختید، بالاخره میتونید مدل خودتون رو ثبت و مستقر کنید. برای شروع، دستور زیر رو برای ثبت مدل اجرا کنید.

POST /_plugins/_ml/models/_register
{
  "name": "ai21.j2-mid-v1",
  "function_name": "remote",
  "model_group_id": "wiBt1YsBhjmsqc9XKPfL",
  "description": "Model for Amazon Bedrock (AI21 Labs Jurassic 2)",
  "connector_id": "wyB41YsBhjmsqc9X5_fW"
}

دقت کنید که فیلدهای model_group_id و connector_id از مقادیری استفاده میکنند که در بخش‌های قبلی یادداشت کردید. خروجی این دستور باید شامل JSON زیر باشه:

{
  "task_id": "xSDN1YsBhjmsqc9X8vdY",
  "status": "CREATED",
  "model_id": "xiDN1YsBhjmsqc9X8vet"
}

لطفا مقدار فیلد model_id رو یادداشت کنید. این همون مدلیه که برای اجرای استنتاج‌ها ازش استفاده خواهید کرد. ممکنه مدتی طول بکشه تا مدل ثبت بشه. در این حالت، میتونید از فیلد task_id برای پیگیری وضعیت فرایند ثبت استفاده کنید. پشت صحنه دستوری که اجرا کردید، یک تسک در یکی از نودهای اپن‌سرچ ایجاد شده. اگه میخواید وضعیت این تسک رو بررسی کنید، از دستور زیر استفاده کنید:

GET /_plugins/_ml/tasks/xSDN1YsBhjmsqc9X8vdY

شما باید یک خروجی JSON با محتوای زیر ببینید:

{
  "model_id": "xiDN1YsBhjmsqc9X8vet",
  "task_type": "REGISTER_MODEL",
  "function_name": "REMOTE",
  "state": "COMPLETED",
  "worker_node": [
    "Wy2Qj6mJRbO5O9BHxbnFtw"
  ],
  "create_time": 1700099125847,
  "last_update_time": 1700099125956,
  "is_async": false
}

با خروجی این دستور، نه تنها میتونید مقدار model_id مدل رو به دست بیارید، بلکه میتونید وضعیت تسک رو هم با فیلد state بررسی کنید. مقدار COMPLETED نشون میده که تسک با موفقیت تموم شده.

به عنوان یک راه جایگزین، میتونید وضعیت خود مدل رو هم بررسی کنید. برای بررسی وضعیت مدل، از دستور زیر استفاده کنید:

GET /_plugins/_ml/models/xiDN1YsBhjmsqc9X8vet

شما باید یک خروجی JSON با محتوای زیر ببینید:

{
  "name": "ai21.j2-mid-v1",
  "model_group_id": "wiBt1YsBhjmsqc9XKPfL",
  "algorithm": "REMOTE",
  "model_version": "1",
  "description": "Model for Amazon Bedrock (AI21 Labs Jurassic 2)",
  "model_state": "REGISTERED",
  "created_time": 1700099125881,
  "last_updated_time": 1700099125881,
  "connector_id": "wyB41YsBhjmsqc9X5_fW"
}

به مقدار فیلد model_state توجه کنید. در حال حاضر روی REGISTERED تنظیم شده که یعنی اپن‌سرچ از وجود این مدل آگاهه اما لزوما برای استفاده آماده نیست. بیایید این وضعیت رو تغییر بدیم. برای استقرار مدل، دستور زیر رو اجرا کنید:

POST /_plugins/_ml/models/xiDN1YsBhjmsqc9X8vet/_deploy

اجرای این دستور یک تسک در اپن‌سرچ برای استقرار مدل ایجاد میکنه. این اتفاق در یکی از نودهای کلاستر میفته. برای بررسی اینکه آیا دستور کامل شده، میتونید دوباره وضعیت مدل رو بررسی کنید:

GET /_plugins/_ml/models/xiDN1YsBhjmsqc9X8vet

این دستور خروجی شبیه به این رو تولید میکنه:

{
  "name": "ai21.j2-mid-v1",
  "model_group_id": "wiBt1YsBhjmsqc9XKPfL",
  "algorithm": "REMOTE",
  "model_version": "1",
  "description": "Model for Amazon Bedrock (AI21 Labs Jurassic 2)",
  "model_state": "DEPLOYED",
  "created_time": 1700099125881,
  "last_updated_time": 1700099683770,
  "last_deployed_time": 1700099683769,
  "planning_worker_node_count": 1,
  "current_worker_node_count": 1,
  "planning_worker_nodes": [
    "Wy2Qj6mJRbO5O9BHxbnFtw"
  ],
  "deploy_to_all_nodes": true,
  "connector_id": "wyB41YsBhjmsqc9X5_fW"
}

به مقدار فیلد model_state توجه کنید. این بار DEPLOYED رو نشون میده که به این معنیه که اپن‌سرچ حالا هم از وجود این مدل آگاهه و هم آماده است تا اجازه اجرای استنتاج‌ها رو بده. خروجی حالا شامل جزئیات مرتبط دیگه‌ای هم هست، مثل اینکه کدوم نودهای کلاستر اپن‌سرچ برای برنامه‌ریزی اجرا استفاده میشن، و همچنین چه تعداد نود برنامه‌ریز و کارگر وجود داره. برای استفاده از مدل، این اطلاعات کاملا بی‌ربطه. اما برای مدیران سیستمی که میخوان کمی بهتر بدونن اپن‌سرچ چطور کار اجرای استنتاج‌ها رو در سراسر کلاستر زمان‌بندی میکنه، مفیده.

یک راه دیگه برای بررسی اینکه آیا مدل به درستی مستقر شده و آماده استفاده است، استفاده از اپن‌سرچ دشبردزه. اگه به OpenSearch Plugins و بعد Machine Learning برید، جدولی رو میبینید که شامل تمام مدل‌های مستقر شده شماست. به دنبال مدلی با نام ai21.j2-mid-v1 بگردید.

تست کردن مدل با استنتاج‌ها (Inferences)

حالا که مدل شما به درستی مستقر شده، وقتشه که اون رو تست کنید. تست کردن یک مدل، فرایند اجرای استنتاج‌ها روی مدله. به عنوان اولین تست، میتونید از مدل یکی از پرسیده‌شده‌ترین سوالات توسط انسان‌ها رو بپرسید: معنی زندگی چیه؟

برای پرسیدن این سوال، دستور زیر رو اجرا کنید:

POST /_plugins/_ml/models/xiDN1YsBhjmsqc9X8vet/_predict
{
  "parameters": {
    "inputs": "What is the meaning of life?"
  }
}

شما باید یک خروجی JSON با محتوای مشابهی ببینید. اولین چیزی که باید در مورد این خروجی JSON بدونید اینه که پاسخ از Amazon Bedrock در فیلد inference_results[0].output[0].dataAsMap قرار داره. هر چیزی قبل از این، یک ساختاره که اپن‌سرچ به عنوان اسکیمای پاسخ پیش‌فرض خودش اضافه میکنه. دوم اینکه، پاسخی که مدل برای سوال «معنی زندگی چیه؟» فرستاده، در فیلد completions[0].data.text قرار داره.

با این توضیحات، پاسخی که مدل ارائه داده نسبتا پیچیده است. این پاسخ شامل فیلدهاییه که ممکنه توسعه‌دهندگان به اونها علاقه‌ای نداشته باشن، مثل توکن‌های هر بخش از پاسخ. علاوه بر این، کاربران رو مجبور میکنه برای به دست آوردن پاسخ واقعی سوال، در یک ساختار پیچیده حرکت کنند. پیچیدگی پاسخ‌هایی که مدل‌ها میفرستن، چیزیه که توسعه‌دهندگان یادگیری ماشین باید در حین ساخت طرح‌های اولیه کانکتور به اون توجه داشته باشن. چون باید به نفع اونها باشه که تجربه‌های ساده‌تر و بهتری برای کاربرانشون ایجاد کنن.

برای نشون دادن اینکه در این مورد چه کاری میشه کرد، بیایید ببینیم چطور طرح اولیه کانکتور موجود رو به‌روز کنیم تا پاسخ تولید شده توسط مدل رو پردازش کرده و یک پاسخ ساده‌تر و کم‌حرف‌تر تولید کنه.

پردازش پاسخ از مدل

برای بهبود پاسخی که مدل تولید میکنه، باید طرح اولیه کانکتور مورد استفاده توسط مدل رو به‌روز کنید. با توجه به اینکه ID کانکتور رو میدونید، به‌روزرسانی پیکربندی اون نسبتا ساده است، به شرطی که:

  1. کلاستر اپن‌سرچ شما برای اجازه دادن به تغییرات در کانکتورها پیکربندی شده باشه.
  2. مدلی که از طرح اولیه کانکتور استفاده میکنه، در وضعیت UNDEPLOYED (مستقر نشده) باشه.

در مورد شرط اول، شما قبلا کلاستر اپن‌سرچ خودتون رو برای اجازه دادن به تغییرات کانکتور پیکربندی کردید، پس لازم نیست نگران باشید. اما یادتون باشه که اگه زمانی با یک کلاستر اپن‌سرچ کار کردید که توسط شما مدیریت نمیشه، ممکنه لازم باشه اول این شرط رو بررسی کنید.

شرط دوم چیزیه که در حال حاضر باید کاری در موردش انجام بدید. از اونجایی که مدل مستقر شده، نمیتونید طرح اولیه کانکتور رو تغییر بدید. هر تلاشی برای تغییر طرح اولیه کانکتور در حالی که مدل مستقر شده، خروجی JSON زیر رو تولید میکنه:

{
  "error": {
    "root_cause": [
      {
        "type": "m_l_validation_exception",
        "reason": "1 models are still using this connector, please undeploy the models first: [xiDN1YsBhjmsqc9X8vet]"
      }
    ],
    "type": "m_l_validation_exception",
    "reason": "1 models are still using this connector, please undeploy the models first: [xiDN1YsBhjmsqc9X8vet]"
  },
  "status": 500
}

برای خارج کردن مدل از حالت استقرار (undeploy)، دستور زیر رو اجرا کنید:

POST /_plugins/_ml/models/xiDN1YsBhjmsqc9X8vet/_undeploy

حالا میتونید پیکربندی طرح اولیه کانکتور رو به‌روز کنید. کاری که قراره انجام بدید اینه که راهی برای کانکتور فراهم کنید تا پاسخی که مدل میفرسته رو پردازش کنه. این کار با توابع پیش‌پردازش و پس‌پردازش سفارشی قابل انجامه. برای نشون دادن نحوه کارکرد این قابلیت، دستور زیر رو اجرا کنید:

PUT /_plugins/_ml/connectors/wyB41YsBhjmsqc9X5_fW
{
  "name": "Amazon Bedrock",
  "description": "Connector for Amazon Bedrock (AI21 Labs)",
  "version": 1,
  "protocol": "aws_sigv4",
  "credential": {
    "access_key": "<YOUR AWS ACCESS KEY>",
    "secret_key": "<YOUR AWS SECRET KEY>"
  },
  "parameters": {
    "region": "us-east-1",
    "service_name": "bedrock",
    "model_name": "ai21.j2-mid-v1"
  },
  "actions": [
    {
      "action_type": "predict",
      "method": "POST",
      "headers": {
        "content-type": "application/json"
      },
      "url": "https://bedrock-runtime.${parameters.region}.amazonaws.com/model/${parameters.model_name}/invoke",
      "request_body": "{\"prompt\":\"${parameters.inputs}\",\"maxTokens\":200,\"temperature\":0.7,\"topP\":1,\"stopSequences\":[],\"countPenalty\":{\"scale\":0},\"presencePenalty\":{\"scale\":0},\"frequencyPenalty\":{\"scale\":0}}",
      "post_process_function": "\n return params['completions'][0].data.text; \n"
    }
  ]
}

شما باید یک خروجی JSON با محتوای زیر ببینید:

{
  "_index": ".plugins-ml-connector",
  "_id": "wyB41YsBhjmsqc9X5_fW",
  "_version": 2,
  "result": "updated",
  "_shards": {
    "total": 1,
    "successful": 1,
    "failed": 0
  },
  "_seq_no": 1,
  "_primary_term": 1
}

این خروجی یعنی طرح اولیه کانکتور با موفقیت به‌روز شد. توجه کنید که در پیکربندی طرح اولیه کانکتور، یک فیلد جدید به نام post_process_function اضافه شده. شما میتونید از این فیلد برای فراهم کردن راهی برای پردازش پاسخ دریافتی از مدل استفاده کنید. در این نسخه جدید از طرح اولیه کانکتور، شما یک عبارت اسکریپت Painless به صورت return params['completions'][0].data.text; پیاده‌سازی کردید تا مقدار موجود در مسیر JSON مشخص شده رو به کاربر برگردونید.

با به‌روز شدن طرح اولیه کانکتور، میتونید مدل رو دوباره مستقر کنید. برای استقرار مدل، این دستور رو دوباره اجرا کنید:

POST /_plugins/_ml/models/xiDN1YsBhjmsqc9X8vet/_deploy

حالا، دوباره از مدل در مورد معنی زندگی بپرسید.

POST /_plugins/_ml/models/xiDN1YsBhjmsqc9X8vet/_predict
{
  "parameters": {
    "inputs": "What is the meaning of life?"
  }
}

وقتی اجرای استنتاج کامل بشه، این بار یک پاسخ ساده‌تر و سرراست‌تر دریافت خواهید کرد:

{
  "inference_results": [
    {
      "output": [
        {
          "name": "response",
          "dataAsMap": {
            "response": """
The meaning of life is a question that has puzzled philosophers and
theologians for centuries. Many people believe that the meaning of life is to
seek happiness and fulfillment in their relationships, careers, and hobbies.
Others believe that the meaning of life is to serve a higher power or to
achieve a specific purpose or goal. Ultimately, the meaning of life is a
subjective concept that may differ from person to person."""
          }
        }
      ],
      "status_code": 200
    }
  ]
}

جالب بود، نه؟ فقط یادتون باشه که استفاده از توابع پیش‌پردازش و پس‌پردازش، یک وابستگی محکم بین کانکتور شما و قرارداد API مورد استفاده توسط مدل ایجاد میکنه. هر زمان که اون قرارداد API به دلیل به‌روز شدن اسکیمای اندپوینت تغییر کنه، شما هم باید طرح اولیه کانکتور خودتون رو متناسب با اون به‌روز کنید.

خودکارسازی مراحل

در این نقطه، شما با موفقیت این آموزش رو به پایان رسوندید و فرصت بررسی قابلیت مدل‌ها رو داشتید. در طول آموزش، ممکنه متوجه شده باشید که اکثر مراحل شامل اجرای یک سری دستورات روی کلاستر اپن‌سرچ بود. این فرایند تکراری و دستی میتونه هم خسته‌کننده باشه و هم مستعد خطا. خوشبختانه، شما میتونید همه اینها رو خودکار کنید. اپن‌سرچ برای تقریبا همه چیز API‌های RESTful ارائه میده که به شما اجازه میده اجرای فرایندهای پیچیده‌ای مثل استقرار مدل‌ها رو خودکار کنید.

مخزن گیت‌هاب همراه این آموزش شامل یک نمونه کد پایتون هست که تمام این مراحل رو برای شما خودکار میکنه. برای اینکه کد کار کنه، فقط کافیه اندپوینت کلاستر اپن‌سرچ و اعتبارسنجی AWS که برای پیکربندی کانکتور استفاده میشه رو ارائه بدید. این میتونه زمانی مفید باشه که نیاز به پیاده‌سازی نسخه‌های جدیدی از مدل دارید، هر زمان که به‌روزرسانی‌هایی در مشخصات طرح اولیه کانکتور انجام میشه.

یک راه دیگه برای خودکارسازی کارها، از طریق قالب‌های AWS CloudFormation با Amazon OpenSearch است. با این منبع، میتونید به سرعت یک یکپارچه‌سازی از Amazon OpenSearch و یک مدل خارجی (مثل Amazon SageMaker) رو با استفاده از زیرساخت به عنوان کد (infrastructure-as-code) راه‌اندازی کنید. میتونید در اینجا بیشتر در مورد نحوه کارکرد این روش یاد بگیرید.

نگاهی به آنچه گذشت

در این بخش از مجموعه، با یک مثال عملی یاد گرفتید که چطور یک مدل پشتیبانی شده توسط Amazon Bedrock رو پیکربندی، مستقر و تست کنید. شما جزئیات آماده‌سازی یک کلاستر اپن‌سرچ برای استفاده از این قابلیت، مراحل ساخت و به‌روزرسانی طرح‌های اولیه کانکتور و همچنین نحوه بررسی مراحل در طول مسیر رو یاد گرفتید. امیدواریم این تجربه عملی شما رو برای امتحان کردن چیزهای جدید هیجان‌زده کرده باشه. برای مثال‌های بیشتر در مورد اتصال به مدل‌های خارجی میزبانی شده روی Amazon SageMaker، Amazon Bedrock و سایر سرویس‌ها، به مثال‌های طرح‌های اولیه کانکتور در مخزن ML Commons مراجعه کنید.

یک سناریوی دیگه هم وجود داره که فکر میکنم باید بهش توجه کنید. اگه بخواید مدل خودتون رو با زیرساخت اختصاصی خودتون بسازید چی؟ در اینجا، شما یاد گرفتید که چطور از یک سرویس شناخته شده مثل Amazon Bedrock استفاده کنید. اما اگه بخواید API‌های یادگیری ماشین خودتون رو با اپن‌سرچ یکپارچه کنید چی؟

در بخش سوم این مجموعه، یاد خواهید گرفت که چطور از یک API یادگیری ماشین سفارشی به عنوان مدل خودتون استفاده کنید. شما یاد میگیرید که چطور از این مدل در سناریوهایی فراتر از اجرای استنتاج‌ها، مثل یکپارچه‌سازی مدل با جستجوهای عصبی (neural searches) استفاده کنید. و فرصت خواهید داشت تمام اینها رو با استفاده از یک دامنه Amazon OpenSearch که روی AWS اجرا میشه، تمرین کنید.

# opensearch # ai-ml # amazon-sagemaker # amazon-bedrock # genai

هر نظری در این مقاله متعلق به نویسنده فردی است و ممکن است منعکس کننده نظرات AWS نباشد.

“`

منابع

دیدگاه‌ها

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *