کاوش داده در یک کرنل پایدار
این راهنما نشان میدهد چطور کاری کنید که یک عامل چیزی پرهزینه را یک بار بارگذاری کند و بعد چند پرسش را روی آن بپرسد، بهجای اینکه هزینهٔ بارگذاری را برای هر پرسش بپردازد.
ابزار eval یک مفسر پایدار را اجرا میکند. متغیرها، ماژولهای واردشده و دادههای بارگذاریشده میان فراخوانیها باقی میمانند.
چرا فقط یک اسکریپت اجرا نکنیم
بخش با عنوان “چرا فقط یک اسکریپت اجرا نکنیم”یک python -c یکباره، هزینهٔ راهاندازی را برای هر پرسش میپردازد. بارگذاری یک دیتافریم چند ثانیه و صد مگابایت هزینه دارد و رسم نمودارش میلیثانیه. وقتی هر پرسش هزینهٔ بارگذاری را داشته باشد، عامل پرسشهای کمتری از آنچه باید میپرسد — و هر پاسخ بهصورت متنی برمیگردد که بعداً باید دوباره تجزیه شود.
یک بار بارگذاری کن، بعد بپرس
بخش با عنوان “یک بار بارگذاری کن، بعد بپرس”
data/runs.csvرا بارگذاری کن و مدت p95 را به تفکیک عامل به من بگو.
import pandas as pdruns = pd.read_csv("data/runs.csv")len(runs)آخرین عبارت همانطور که یک نوتبوک بازتاب میدهد، چاپ میشود؛ بنابراین len(runs) بدون print تعداد سطرها را گزارش میکند.
سپس، در یک فراخوانی جداگانه:
runs.groupby("agent")["duration_ms"].quantile(0.95).sort_values()runs هنوز بارگذاریشده است. یک دیتافریم pandas بهجای repr بهصورت جدول بازگردانده میشود.
نمودارها در گفتگو ظاهر میشوند
بخش با عنوان “نمودارها در گفتگو ظاهر میشوند”import matplotlib.pyplot as pltruns.groupby("agent")["duration_ms"].mean().plot.bar()شکلها پس از اجرای سلول ثبت و بهصورت تصویر بازگردانده میشوند و رونوشت آنها را نمایش میدهد. شما نمودار را میبینید؛ عامل هم میبیند.
شکلها پس از ثبت بسته میشوند. شکل جمعنشدهای دوباره رسم میشد و سلول بعدی هم آن را دوباره میفرستاد؛ بنابراین یک نشست پنجسلولی اولین نمودار را پنج بار منتشر میکرد.
اصطلاحاتی که بههرحال تایپ میکردید
بخش با عنوان “اصطلاحاتی که بههرحال تایپ میکردید”اینها بهجای خطا دادن، به کد ساده بازنویسی میشوند:
| چیزی که تایپ میکنید | اتفاقی که میافتد |
|---|---|
%pip install x |
pip را اجرا میکند و سپس کش ماژول را پاک میکند تا import بعدی آن را ببیند |
%cd path |
os.chdir |
!command |
یک زیرفرایند ثبتشده |
%%bash |
بقیهٔ سلول بهعنوان یک اسکریپت شل |
%%timeit |
۱۰۰۰ اجرای زمانسنجیشده |
پاککردن کش %pip همان چیزی است که اهمیت دارد: نصبکردن در یک مفسر زنده برای ماژولی که قبلاً وارد شده هیچ کاری نمیکند؛ بنابراین بدون آن، نسخهای که تازه نصب کردهاید همان نسخهای نیست که اجرا میشود.
صدا زدن ابزارهای خودتان از داخل یک سلول
بخش با عنوان “صدا زدن ابزارهای خودتان از داخل یک سلول”paths = tool("find", {"pattern": "**/*.dart", "path": "lib"})for path in paths.splitlines()[:100]: contents = tool("read", {"path": path}) ...tool(name, args) دوباره به رجیستری ابزارهای خودِ عامل وارد میشود. یعنی یک سلول میتواند روی صدها فایل پخش شود، یا کار را از طریق task واگذار کند، بدون اینکه مدل برای هر مورد یک نوبت صرف کند.
یک فراخوانی پلشده تا وقتی در جریان است، مهلت سلول را معلق میکند. این بودجه عدم فعالیت را میسنجد، نه ساعت دیواری — سلولی که کار را به زیرعاملها پخش میکند و چهار دقیقه منتظر میماند معلق نیست، و کشتن آن در میانهٔ پخش، کل وضعیت کرنل را از دست میدهد.
شروع از نو
بخش با عنوان “شروع از نو”eval(code: "…", reset: true, description: "Start a clean interpreter")مفسر را دور میریزد و یکی تمیز شروع میکند. هر چیزی که بارگذاری شده از دست میرود، که همین هدف است.
کرنل کجا اجرا میشود
بخش با عنوان “کرنل کجا اجرا میشود”اگر گفتگو محفظهای داشته باشد، در آن؛ در غیر این صورت روی میزبان.
یک مفسر پایدار که مدلی در حال خواندن یک مخزن نامعتبر آن را میراند، دقیقاً همان چیزی است که اجرای صرفاً در محفظه برای آن وجود دارد: یک فراخوانی bash یکباره دستکم پایان مییابد، در حالی که کرنل شلی است که به یاد میآورد.
برای رسیدن به آن، محفظهای را راهاندازی نمیکند — همان قاعدهای که جلوی خودکار شروع شدن تب ریگ را میگیرد. اگر میخواهید کرنل در محفظه باشد، ابتدا شل گفتگو را باز کنید. به به عامل ماشینی برای تست بدهید نگاه کنید.
محدودیتها
بخش با عنوان “محدودیتها”- هر کرنل در هر لحظه یک سلول. دو سلول که در یک مفسر مسابقه بدهند، دو نیمه از دو برنامهاند که در یک فضاینام در هم بافته شدهاند.
- خروجی سقف دارد. سلولی که در حلقهٔ print است، بهجای اینکه پنجرهٔ بافت را پر کند، بریده میشود.
- چهار تصویر در هر سلول. یک حلقهٔ رسم میتواند در هر تکرار یک شکل منتشر کند، و هر تصویر در درخواستی که آن را حمل میکند یک هزینهٔ ثابت سنگین است.
- کرنل با پایان اجرا میمیرد. کرنلی که پس از پایان گفتگو هنوز دیتافریمی را نگه داشته باشد، یک نشت است.
مرتبط
بخش با عنوان “مرتبط”- سندباکس و امنیت — اینکه «در محفظه بودن» در اینجا یعنی چه
- به عامل ماشینی برای تست بدهید — باز کردن محفظه
- ابزارهای داخلی عامل — آرگومانها