اصل ماجرا
در این مقاله یک Feature Store مینیمال با پنج مؤلفه اصلی (ثبتنام ویژگی، ذخیرهسازی آفلاین، ذخیرهسازی آنلاین، لولهکشی مادیسازی و سرویس FastAPI) ساخته میشود. با استفاده از DuckDB و Parquet دادههای تاریخی پردازش میشوند، Redis برای واکشی زیر یک میلیثانیه استفاده میشود و مثال کاربردی آن در توصیهگر شخصیسازیشده LLM برای سرویس پخش ویدئو نشان داده میشود. در پایان تفاوتهای Feature Store و پایگاههای برداری و نکات عملی برای پیادهسازی واقعی بررسی میشود.
متن کامل ترجمهشده
فروشگاه های ویژگی از ابتدای کار: یک اجرای کار حداقل ساخت پنج اجزای که هر فروشگاه ویژگی نیاز دارد، سپس ببینید که کجا AI طراحی را تغییر می دهد. # معرفی اکثر تیم ها متوجه می شوند که آنها نیاز به یک فروشگاه ویژگی در راه سخت دارند. یک مدل خیانت در نوت بوک کار می کند و به آرامی در تولید قطع می شود. یک عامل پشتیبانی یک پاسخ کلی می دهد زیرا هیچ ایده ای ندارد که کاربر چه کسی است. یک پایتخت توصیه کننده همان محاسبات “30 روز صرفه” را در سه شغل تکرار می کند، و دو نفر از آنها موافق نیستند. یک فروشگاه ویژگی بخشی از زیرساخت است که این مشکلات را اصلاح می کند. این ویژگی ها را یک بار تعریف می کند، آنها را در دو شکل (یک برای آموزش، یک برای خدمت) ذخیره می کند و هر دو را همزمان نگه می دارد. ما می خواهیم حداقل یک بار از یک# What a Feature Store Actually Solves The classic pitch is training-serving skew: the SQL that built your training set is not the same code path that runs at inference, so the values drift. That problem is real, and the offline plus online split is the standard fix. The modern pitch is wider. Large language model (LLM) agents and retrieval-augmented generation (RAG) pipelines need structured user context at inference time, on every request, in under 10ms. An LLM has no memory of who the user is. If we want personalized output, we have to inject the user’s plan tier, recent activity, and account state into the prompt, and we need a system that can return those values at inference time and consistently. That’s exactly what a feature store’s online store and retrieval API- یک فروشگاه آنلاین در Parquet، با DuckDB، برای آموزش و پر کردن. - یک فروشگاه آنلاین در Redis برای جستجوی با تاخیر پایین در نتیجه. - یک پایتخت مادی سازی که آخرین ارزش ها را از خارج از اینترنت به آنلاین منتقل می کند. - یک سرویس FastAPI که یک API جستجوی چاپ شده را نشان می دهد. # مثال اجرا: یک توصیه LLM شخصی ما یک سرویس streaming را اجرا می کنیم. هنگامی که یک کاربر برنامه را باز می کند، یک LLM یک پیام کوتاه و شخصی “چرا به دنبال بعدی” ایجاد می کند. LLM نیاز به سه چیز در مورد کاربر دارد: واحد user_id است. ما این سه ویژگی را ثبت می کنیم، آنها را مادی سازی می کنیم و آنها را به LLM در زمان درخواست ارائه می کنیم. // 1. تعریف ریکارژ ویژگی ریکارژ یک ریکارژ فقط جایی است که ویژگی ها یک بار اعلام می شوند، بااز کلاس های داده واردات Dataclass از واردات واردات Literal @dataclass(frozen=True) Class Feature: name: str entity: str dtype: Literal[“int”, “float”, “str”] source: str # path to a Parquet file or a SQL view REGISTRY: dict[str, Feature] = { “user_segment”: Feature(“user_segment”, “user_id”, “user_id”, “str”, “data/user_segment.reparquet”), “watch_count_30d”: Feature(“watch_count_30d”, “user_id”, “int”, “data/watch_count_30d.parquet”, “data_user_segment_strider_type contract=last_typeuser_user_type”: Feature(“lastgenreدر سیستم های تولید، این می تواند YAML یا یک ماژول Python در یک ریپو Git، با بررسی کد در هر تغییرات، خوانده شود، بنابراین نام گذاری یک ویژگی، تغییر نوع آن، یا نشان دادن آن به یک منبع جدید در یک مکان اتفاق می افتد. در سیستم های تولید، این می تواند YAML یا یک ماژول Python در یک ریپو Git، با بررسی کد در هر تغییرات. // 2. ساخت فروشگاه خارج از اینترنت با DuckDB و Parquet فروشگاه خارج از اینترنت دارای تاریخچه کامل هر ارزش ویژگی است. ما از فایل های Parquet به عنوان لایه ذخیره سازی و DuckDB به عنوان موتور سوال استفاده می کنیم. DuckDB به طور مستقیم Parquet را خواند، که به معنای یک پایگاه داده جداگانه برای اجرا نیست. اینجا نمونه از کد است: import duckdb import pandas به عنوان pd get def_historical_به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال.به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال، به عنوان مثال.یک HMGET تنها تمام ویژگی ها را که ما در یک سفر به دور درخواست می کنیم را باز می کند. در یک مثال Redis محلی با سه ویژگی، این در کمتر از 1ms به پایان می رسد. // 4. راه اندازی Materialization Pipeline Materialization ارزش ها را از آنلاین به آنلاین منتقل می کند. در یک سیستم واقعی این در یک برنامه (Airflow، cron، یک کار streaming) اجرا می شود. در اینجا این یک فعالیت است. def materialize(features: list[str]) -> None: by_entity: dict[str, dict] = {} برای fname در ویژگی ها: f = REGISTRY[fname] src = f.source.replace(”’”, ”””) df = duckdb.sql(f"" SELECT {f.entity}, {fname} FROM{src} ‘QALموضوعات(): write_online(“user_id”, entity_id, ارزش ها) کد کامل را می توان در اینجا پیدا کرد. هنگامی که شما آن را اجرا می کنید، خروج نشان می دهد: user_id:8a2f -> {‘user_segment’: ‘power_user’, ‘watch_count_30d’: 47, ‘last_genre’: ‘documentary’} user_id:b13c -> {‘user_segment’: ‘casual’, ‘watch_count_30d’: 5، ‘last_genre’: ‘thriller’} شرط QUALIFY آخرین خط را برای هر یک از شرکت ها حفظ می کند. ما تمام ویژگی ها را برای همان کاربر را به یک Redis گروه می کنیم تا سفرهای دور را قطع کنیم. این کار را بر روی نیازهای هر یک از ویژگی ها اجرا کنید: ساعت برای watch_count_30d، تقریباًf” f” User context: segment={f[user_segment’]}, ” f” watched {f[watch_count_30d’]} titles in last 30 days, ” f” last genre watched: {f[‘last_genre’]}.\n” f” Task: suggest 3 titles in a friendly, short message.” ) کل کد در اینجا یافت می شود. هنگامی که شما آن را اجرا می کنید، محصول نشان می دهد: POST /get-online-features -> 200 body: {‘user_id’: ‘8a2f’, ‘features’: {‘user_segment’: ‘power_user’, ‘watch_count_30d’: 47, ‘last_genre’: ‘documentary’}} Prompt the LLM would receive: System: You recommend for a streaming service. User context: {‘user_id’: ‘آنها مشکلات جستجوی مختلف را حل می کنند. یک قایق LLM واقعی از هر دو استفاده می کند. پایگاه داده وکتور سه شبیه ترین جلسات تماشای گذشته را باز می گرداند. فروشگاه ویژگی به بخش کاربر و محدوده های اخیر را باز می گرداند. پیشنهاد آنها را ترکیب می کند. # Anti-Patterns مشترک برخی از مدل هایی که ما همچنان می بینیم شکست: - ویژگی های کامپیوتری در داخل سرویس مدل. همان منطق به پایان می رسد در نوار آموزش و API، و دو تعریف در یک چهارم حرکت می کند. - مراقبت از فروشگاه آنلاین به عنوان منبع حقیقت. Redis داده ها را در یک راه اندازی بد از دست می دهد. فروشگاه غیر فعال کانیونیک است; فروشگاه آنلاین یک کیش است. - عبور از رئیچ. - سه تیم به طور مستقل فعال_user را تعریف می کنند و درایورها را متوقف میمجموعه آموزشی به نظر می رسد عالی است، مدل تولید به نظر می رسد شکسته است و غفلت است. # مقایسه این به Feast، Tecton، و Databricks خطوط ما ~200 کار را به صورت کوچک انجام می دهند. Feast نزدیک ترین مقایسه است اگر ما می خواهیم در همان مدل، خود میزبان برویم. Tecton و Databricks راه های مدیریت شده هستند و ویژگی های LLM واضح دارند (Tecton’s Feature Retrieval API برای LLMs، Databricks Feature Serving for compound generative AI systems). انتخاب بین آنها به طور عمده یک سوال است که ما چقدر می خواهیم خودمان را اجرا کنیم و آیا بقیه سنگ ما در Databricks زندگی می کنند. # خلاصه یک فروشگاه ویژگی های کار به پنج بخش می رسد: یک ثبت، یک فروشگاه آنلاین، یک فروشگاه آنلاین، یک مرحله مادی سازی، و یک API بازاریابی. ساختاین همچنین نشان می دهد که در کجا طراحی برای AI تغییر می کند: مسیر بازاریابی آنلاین سطح LLM هک است، نقطه ای در زمان با توجه به زمانی که ما آموزش و یا ارزیابی، و پایگاه داده ویکتور در کنار فروشگاه ویژگی، نه در درون آن قرار دارد. هنگامی که ما این قطعات را، جایگزین نسخه حداقل ما برای Feast، Tecton، یا Databricks به طور عمده یک مهاجرت از ثبت است. شکل سیستم همچنان یکسان است. نیت Rosidi یک دانشمند داده و در استراتژی محصول است. او همچنین یک استاد معاون تحصیلی تجزیه و تحلیل داده است، و بنیانگذار StrataScratch است، یک پلت فرم کمک به دانشمندان داده برای آماده شدن برای مصاحبه های خود با سوال های مصاحبه واقعی از شرکت های برتر. نیت در مورد آخرین روند در بازار حرفه ای نوشته است، مشاوره می دهد،
چرا مهمه؟
این مقاله نشان میدهد که چگونه میتوان بهصورت خودکار و بدون درز دادههای آموزشی و سرویسگذاری را همگام کرد؛ تیمهای دادهمحور، مهندسان ML و توسعهدهندگان سرویسهای هوش مصنوعی از این روش برای جلوگیری از خطاهای پیشبینی و بهبود سرعت پاسخگویی بهره میبرند. خواننده باید این خبر را مهم بداند چون با پیادهسازی یک Feature Store ساده میتواند هزینههای زیرساختی را کاهش دهد، کیفیت مدلها را ارتقا دهد و زیرساختی مقیاسپذیر برای برنامههای LLM فراهم کند.
به درد کی میخوره؟
• مهندسان داده • متخصصان یادگیری ماشین • توسعهدهندگان سرویسهای هوش مصنوعی • تیمهای DevOps • مدیران فنی محصول
نظر Blue IT News
Blue IT News توصیه میکند قبل از انتخاب سرویسهای تجاری، ابتدا یک پیادهسازی ساده همانند این را اجرا کنید؛ این کار به درک بهتر نیازهای خاص سازمان و جلوگیری از وابستگی زودهنگام به ابزارهای گرانقیمت کمک میکند.
<div class=“disclosure”> این صفحه ترجمه و تفسیر کاملی از گزارش اصلی Kdnuggets است که توسط تیم تحریریه بلو آی تی نیوز به فارسی ترجمه و تحلیل شده. برای مشاهده نسخه اصلی، به منبع مراجعه کنید. </div>