اگر دنیای هوش مصنوعی و یادگیری ماشین را دنبال کرده باشید، میدانید که تقریباً تمام مقالهها، آموزشها و کدهای پروژهها بر بستر Jupyter Notebook ارائه میشوند. این ابزار مثل میز کار یا چرکنویس آزمایشگاهی است که امکان اجرای مرحلهبهمرحلهی کد، مصورسازی فوری دادهها و مستندسازی در قالب متن را یکجا فراهم میکند؛ مهارتی که هر مهندس هوش مصنوعی در همان گامهای نخست به آن نیاز دارد.
با این حال، نوتبوکها چالشهای خاص خودشان را دارند. اجرای نامرتب سلولها، باقی ماندن وضعیت متغیرهای حذفشده در حافظه و نشت رم از خطاهای متداولی هستند که ساعتها وقت توسعهدهنده را میگیرند. در این درس یاد میگیرید چطور از این تلهها عبور کنید و چه زمانی کد را از فضای نوتبوک به اسکریپتهای تمیز و آمادهی محیط عملیاتی منتقل کنید.
برای اجرای محلی این درس نیازی به سختافزار سنگین یا GPU ابری ندارید و کدهای پایه روی پردازندهی سیستم شخصیتان بدون مشکل اجرا میشوند. همچنین اگر بخواهید از گزینههایی مثل Google Colab استفاده کنید، در نظر داشته باشید که طبق گزارشها، دسترسی به برخی سرویسهای ابری خارجی از نشانیهای اینترنتی ایران ممکن است ناپایدار یا محدود باشد و بررسی وضعیت دسترسی پیش از شروع کار ضروری است.
نوتبوکها میز کار آزمایشگاهی در مهندسی هوش مصنوعی هستند. اینجا پروتوتایپ میسازید و بعد، بخشهایی را که جواب دادهاند به محیط عملیاتی (Production) میبرید.
اهداف یادگیری
- نصب و اجرای JupyterLab، Jupyter Notebook یا VS Code همراه با افزونهی Jupyter
- استفاده از دستورهای جادویی (
%timeit،%%time،%matplotlib inline) برای بنچمارکگیری و مصورسازی مستقیم در نوتبوک - تشخیص زمان مناسب برای استفاده از نوتبوک در برابر اسکریپت و پیادهسازی جریان کاری «اکتشاف در نوتبوک، ارسال به عملیات در اسکریپت»
- شناسایی و پرهیز از تلههای رایج نوتبوک: اجرای نامرتب، وضعیت پنهان و نشت حافظه
صورت مسئله
تمام مقالهها، آموزشها و مسابقات Kaggle در حوزهی هوش مصنوعی از نوتبوکهای Jupyter استفاده میکنند. نوتبوکها اجازه میدهند کد را تکهتکه اجرا کنید، خروجیها را درجا ببینید، کد را با توضیحات درهم بیامیزید و با سرعت بالا پیش بروید. یادگیری هوش مصنوعی بدون نوتبوک درست مثل حل تمرینهای ریاضی بدون چرکنویس است.
اما نوتبوکها تلههای واقعی دارند. خیلیها از آنها برای همهچیز استفاده میکنند؛ حتی کارهایی که اصلاً مناسبشان نیست. اگر بدانید کِی باید از نوتبوک استفاده کنید و کِی از اسکریپت، بعداً از کابوسهای طولانی دیباگ نجات پیدا خواهید کرد.
مفهوم
یک نوتبوک فهرستی از سلولهاست. هر سلول یا کد است یا متن.
کرنل (Kernel) یک پردازهی پایتون است که در پسزمینه اجرا میشود. وقتی سلولی را اجرا میکنید، کد به کرنل فرستاده میشود؛ کرنل آن را اجرا میکند و نتیجه را پس میفرستد. همهی سلولها از یک کرنل مشترک استفاده میکنند؛ بنابراین متغیرها بین سلولهای مختلف در حافظه میمانند.
همین ویژگی که «سلولها به همان ترتیبی که کلیک میکنید اجرا میشوند»، هم نقطهی قوت نوتبوکهاست و هم دامی که ممکن است با آن به پای خودتان شلیک کنید.
پیادهسازی
مرحلهی 1: رابط کاربری خود را انتخاب کنید
سه گزینه، یک فرمت واحد:
| رابط کاربری | نصب | مناسب برای |
|---|---|---|
| JupyterLab | ابتدا pip install jupyterlab سپس jupyter lab |
تجربهی یک IDE کامل، چند تب همزمان، مرورگر فایل، ترمینال |
| Jupyter Notebook | ابتدا pip install notebook سپس jupyter notebook |
ساده، سبک، یک نوتبوک در هر زمان |
| VS Code | نصب افزونهی "Jupyter" | در ادیتور همیشگی شما، یکپارچگی با Git، قابلیتهای دیباگ |
هر سه ابزار یک فایل مشترک با پسوند .ipynb را میخوانند و مینویسند. هر کدام را دوست دارید انتخاب کنید. در دنیای هوش مصنوعی، JupyterLab رایجترین گزینه است.
pip install jupyterlab
jupyter lab
مرحلهی 2: کلیدهای میانبر ضروری
شما در دو حالت کلی کار میکنید. با زدن کلید Escape وارد حالت فرمان (Command mode؛ با نوار آبی در سمت چپ) میشوید و با زدن Enter به حالت ویرایش (Edit mode؛ با نوار سبز) میروید.
حالت فرمان (پُرکاربردترینها):
| کلید | عملکرد |
|---|---|
Shift+Enter |
اجرای سلول و رفتن به سلول بعدی |
A |
ایجاد سلول در بالا |
B |
ایجاد سلول در پایین |
DD |
حذف سلول |
M |
تبدیل به Markdown |
Y |
تبدیل به کد |
Z |
لغو عملیات سلول (Undo) |
Ctrl+Shift+H |
نمایش همهی میانبرها |
حالت ویرایش:
| کلید | عملکرد |
|---|---|
Tab |
تکمیل خودکار (Autocomplete) |
Shift+Tab |
نمایش امضای تابع (Signature) |
Ctrl+/ |
کامنت کردن یا خروج از کامنت |
میانبر Shift+Enter همان کلیدی است که در روز هزار بار از آن استفاده خواهید کرد. اول از همه این را یاد بگیرید.
مرحلهی 3: انواع سلولها
سلولهای کد پایتون را اجرا میکنند و خروجی را نشان میدهند:
import numpy as np
data = np.random.randn(1000)
data.mean(), data.std()
خروجی: (0.0032, 0.9987)
سلولهای Markdown متن فرمتشده را رندر میکنند. از این سلولها برای مستندسازی کاری که انجام میدهید و چراییِ آن استفاده کنید. این بخش از تیترها، متن بولد، ایتالیک، فرمولهای ریاضی لاتک ()، جدولها و تصاویر پشتیبانی میکند.
مرحلهی 4: دستورهای جادویی
اینها دستورهای پایتون نیستند؛ دستورهای اختصاصی Jupyter هستند که با % (دستور جادویی خطی) یا %% (دستور جادویی سلولی) شروع میشوند.
اندازهگیری زمان اجرای کد:
%timeit np.random.randn(10000)
خروجی: 45.2 us +/- 1.3 us per loop
%%time
model.fit(X_train, y_train, epochs=10)
خروجی: Wall time: 2.34 s
دستور %timeit کد را چندین بار اجرا میکند و میانگین میگیرد. دستور %%time کد را فقط یک بار اجرا میکند. از %timeit برای بنچمارکهای خُرد و از %%time برای رانهای آموزش مدل استفاده کنید.
فعالسازی نمایش درونبرنامهای نمودارها:
%matplotlib inline
از این پس هر plt.plot() یا plt.show() نمودار را مستقیماً داخل نوتبوک رسم میکند.
نصب بستهها بدون خروج از نوتبوک:
!pip install scikit-learn
علامت ! هر دستوری را در شل (Shell) سیستم اجرا میکند.
بررسی متغیرهای محیطی:
%env CUDA_VISIBLE_DEVICES
مرحلهی 5: نمایش مستقیم خروجیهای غنی
نوتبوکها آخرین عبارت موجود در سلول را بهطور خودکار نمایش میدهند؛ اما کنترل نمایش دست خودتان است:
import pandas as pd
df = pd.DataFrame({
"model": ["Linear", "Random Forest", "Neural Net"],
"accuracy": [0.72, 0.89, 0.94],
"training_time": [0.1, 2.3, 45.6]
})
df
این کد خروجی را بهصورت یک جدول فرمتشدهی HTML رندر میکند، نه یک مشت متن خام. ماجرا برای نمودارها هم همین است:
import matplotlib.pyplot as plt
plt.figure(figsize=(8, 4))
plt.plot([1, 2, 3, 4], [1, 4, 2, 3])
plt.title("Inline Plot")
plt.show()
نمودار دقیقاً زیر همان سلول ظاهر میشود. دلیل اصلی تسلط نوتبوکها بر کارهای هوش مصنوعی همین است؛ داده، نمودار و کد را یکجا کنار هم میبینید.
برای تصاویر:
from IPython.display import Image, display
display(Image(filename="architecture.png"))
مرحلهی 6: سرویس Google Colab
سرویس Colab یک نوتبوک رایگان Jupyter روی ابر است. یک GPU، کتابخانههای ازپیشنصبشده و اتصال به Google Drive را در اختیارتان میگذارد؛ بدون نیاز به هیچگونه تنظیمات اولیه.
- به آدرس colab.research.google.com بروید.
- هر فایل
.ipynbاز این دوره را آپلود کنید. - مسیر Runtime > Change runtime type > T4 GPU (free) را دنبال کنید.
تفاوتهای Colab با نسخهی محلی Jupyter:
- فایلها بین نشستها باقی نمیمانند (باید در Drive ذخیره یا دانلودشان کنید).
- کتابخانههای numpy، pandas، matplotlib، torch، tensorflow و sklearn از قبل نصب شدهاند.
from google.colab import filesبرای آپلود و دانلود فایلها.from google.colab import drive; drive.mount('/content/drive')برای فضای ذخیرهسازی دائمی.- در پلن رایگان، نشستها بعد از 90 دقیقه عدم فعالیت قطع میشوند (Timeout).
کاربرد عملی
نوتبوک در برابر اسکریپت: چه زمانی از کدام استفاده کنیم؟
| نوتبوک برای | اسکریپت برای |
|---|---|
| کاوش در یک دیتاست | پایپلاینهای آموزش مدل |
| ساخت پروتوتایپ مدل | ابزارهای کمکی چندبارمصرف |
| مصورسازی نتایج | هر برنامهای که if __name__ دارد |
| توضیح و تشریح کارتان | کدهایی که طبق برنامهی زمانی اجرا میشوند |
| آزمایشهای سریع | کدهای عملیاتی (Production) |
| تمرینهای دوره | بستهها و کتابخانهها |
قاعده این است: اکتشاف در نوتبوک، ارسال به عملیات در اسکریپت.
یک جریان کاری رایج در هوش مصنوعی:
- کاوش در دادهها درون یک نوتبوک
- ساخت پروتوتایپ مدل درون نوتبوک
- وقتی کد جواب داد، انتقال آن به فایلهای
.py - ایمپورت دوبارهی همان فایلهای
.pyبه نوتبوک برای آزمایشهای بیشتر
تلههای رایج
اجرای نامرتب سلولها (Out-of-order execution). سلول 5 را اجرا میکنید، بعد سلول 2، و بعد سلول 7. نوتبوک روی سیستم شما کار میکند، اما وقتی کسی آن را از بالا به پایین اجرا کند به خطا میخورد. راهحل: قبل از به اشتراک گذاشتن، گزینهی Kernel > Restart & Run All را بزنید.
وضعیت پنهان (Hidden state). سلولی را پاک میکنید، اما متغیری که ساخته هنوز در حافظه است. نوتبوک در ظاهر تمیز به نظر میرسد، ولی به یک سلول شبح وابسته است. راهحل: کرنل را مرتب ریاستارت کنید.
نشت حافظه (Memory leaks). لود کردن یک دیتاست 4 گیگابایتی، آموزش مدل و لود کردن یک دیتاست دیگر؛ هیچچیزی از حافظه آزاد نمیشود. راهحل: del variable_name و gc.collect() یا ریاستارت کرنل.
تحویل پروژه
این درس این خروجی را تولید میکند:
outputs/prompt-notebook-helper.mdبرای دیباگ مشکلات نوتبوک
تمرینها
- برنامهی JupyterLab را باز کنید، یک نوتبوک بسازید و با
%timeitسرعت List Comprehension را در مقایسه با numpy برای ساخت آرایهای از 100,000 عدد تصادفی بسنجید. - نوتبوکی بسازید که هم سلولهای Markdown داشته باشد و هم کد، یک فایل CSV را بخواند، یک دیتافریم را نشان دهد و یک نمودار رسم کند. سپس Kernel > Restart & Run All را بزنید تا مطمئن شوید از اول تا آخر بدون خطا کار میکند.
- کد فایل
code/notebook_tips.pyرا بردارید، داخل یک نوتبوک Colab کپی کنید و با یک GPU رایگان آن را اجرا کنید.
نکات راهنما
تمرین 1. برنامهی JupyterLab را با jupyter lab اجرا کنید؛ سپس هر پیادهسازی را در سلول جداگانهای بگذارید که با %timeit شروع میشود. در هر دو سلول از همان اندازهی 100,000 استفاده کنید تا هر دو زمانسنجی یک کار یکسان را اندازه بگیرند.
تمرین 2. برای خواندن دادهها از pd.read_csv استفاده کنید، دیتافریم را در آخرین خط سلول بنویسید تا نمایش داده شود و با df.plot() یا matplotlib نمودار رسم کنید. بعد از اجرای Kernel > Restart & Run All، باید کنار تمام سلولها در شمارندهی اجرا عدد بیفتد و هیچ سلولی نباید خطایی نشان دهد.
تمرین 3. در Colab، قبل از کپی کردن کدها گزینهی Runtime > Change runtime type > GPU را انتخاب کنید. وقتی هر تابع در code/notebook_tips.py بخش مربوط به خودش را چاپ کند و اجرای torch.cuda.is_available() در یک سلول مقدار True بدهد، یعنی اجرا درست بوده است.
اصطلاحات کلیدی
| اصطلاح | در زبان عامیانه | معنای فنی و دقیق |
|---|---|---|
| کرنل (Kernel) | «همان چیزی که کدم را اجرا میکند» | یک پردازهی جداگانهی پایتون که سلولها را اجرا میکند و متغیرها را در حافظه نگه میدارد |
| سلول (Cell) | «یک بلوک کد» | یک واحد با قابلیت اجرای مستقل در نوتبوک، از جنس کد یا Markdown |
| دستور جادویی (Magic command) | «ترفندهای ژوپیتر» | دستورهای ویژهای با پیشوند % یا %% که محیط نوتبوک را کنترل میکنند |
.ipynb |
«فایل نوتبوک» | یک فایل بر پایهی JSON حاوی سلولها، خروجیها و متادیتا؛ مخفف IPython Notebook |
برای مطالعهی بیشتر
- مستندات JupyterLab برای مشاهدهی تمام امکانات
- پرسشهای متداول Google Colab برای محدودیتها و ویژگیهای اختصاصی Colab
- 28 نکته دربارهی نوتبوک Jupyter برای میانبرهای کاربران حرفهای
