اجرای تحت وب ژوپیتر نوتبوکها توسط سرویس Azure Notebooks
سرویس Microsoft Azure Notebooks یک Interactive Notebook یا یک محیط آنلاین برنامهنویسی پویا (interactive) قدرت گرفته از Jupyter است که زبانهای پایتون، R و F# را پشتیبانیمیکند.
مزیت این سرویس نسبت به سرویسهای مشابه مثل mybinder و یا حتی repl.it؛ در دسترس بودن برای همه کاربران و از پیش نصب بودن تعداد زیادی از پکیجهای مورد نیاز برای انواع زمینههای کاری است. سرویس Azure Notebooks مایکروسافت، مکان ساخت نوتبوک و یا کلونکردن یک ریپوزیتوری گیت که دارای نوتبوک است و اجرای آن تحت وب را به کاربران میدهد و یک ترمینال برای مدیریت و کار با فایلهای نوتبوک در اختیار هر کاربر میگذارد. هر کاربر ۴ گیگابایت فضای مموری و ۱ گیگابایت فضای ذخیرهسازی فایل برای هر نوتبوک به صورت رایگان در اختیار دارد.
برای استفاده از این سرویس، تنها داشتن یک ایمیل در یکی از سرویسهای مایکروسافت مانند outlook و یا Hotmail کافیست.
در ادامه موارد زیر را بررسی میکنیم:
نحوه ورود و اجرای نوتبوکها در Azure notebook و ایجاد یا کلون کردن یک نوتبوک
نصب پکیجها داخل نوتبوکها یا توسط ترمینال
ورود، ایجاد یا کلون و اجرای نوتبوکها
پس از ورود -توسط ایمیل مایکروسافت (outlook یا Hotmail)- برای دسترسی به نوتبوکها وارد قسمت Libraries (از گزینههای بالای صفحه) میشویم تا لیست نوتبوکها فعلی نمایش داده شود.
برای ساخت و یا کلون کردن نوتبوک روی گزینه New Library + کلیک میکنیم. حال برای کلون کردن ریپازیتوری وارد تب From GitHub شده و آدرس آن را در فیلد اول و نام دلخواه خود برای نوتبوکی که ساخته خواهد شد را در فیلد دوم و آدرس دلخواهمان برای دسترسی به این نوتبوک را در فیلد سوم وارد میکنیم.
پس از پایان عملیات کلون کردن، وارد کتابخانه کلون شده میشویم و نوتبوکها با انتخاب آنها در دسترس هستند.
اگر سرور اجرای نوتبوکها روشن نباشد با انتخاب یکی از نوتبوکها روشن شده و پس از مدتی نوتبوک اجرا شده و همانند یک ژوپیتر نوتبوک که در کامپیوتر اجرا میکنیم، تحت وب قابل استفاده است.
با باز کردن نوتبوک پنجرهای برای انتخاب کرنل مورد نیاز برای این نوتبوک باز خواهد شد. البته کرنل را میتوان بعدا از طریق تب Kernel داخل خود نوتبوک هم تغییر داد.
در ویدئو برای تست نوتبوک و کرنل آن سه کتابخانه openCV، Tensorflow و Keras در نوتبوک import شده و ورژن آنها بررسی و چاپ شد.
نصب پکیج
علاوه بر تعداد زیاد پکیجهای از پیش نصب شده برای هر نوتبوک امکان نصب پکیجهای دلخواه هم از داخل نوتبوک و از هم طریق ترمینال وجود دارد.
پکیجهایی که نصب میشوند تنها در طول مدت روشن بودن سرور نوتبوکها فعال هستند و نوتبوکهای غیرفعال پس از ۱ ساعت عدم فعالیت خاموش میشوند.
نصب پکیج از داخل نوتبوک
در داخل نوتبوکها با استفاده از اوپراتور «!» در ابتدای خط هر سلول میتوان دستوری را از داخل نوتبوک روی کرنل سیستمعامل سرور اجرا کرد و خروجی آن را داخل نوتبوک مشاهده کرد. برای امتحان این موضوع دستور cal (کوتاه کلمه calendar) استفاده شد که یک تقویم کوتاه را نمایش میدهد.
همانطور که دستور cal که یک دستور محیط ترمینال ([terminal [bash) است داخل نوتبوک قابل دسترسی است؛ دستورات pip یا conda که برای نصب پکیجها استفاده میکنیم هم در دسترس هستند.
برای امتحان در دسترس بودن این دو دستور لیست پکیجهای نصب شده توسط هر دو برنامه با دستورهای pip list و conda list چاپ شد.
همچنین برای مثال نصب پکیج، پکیج cowsay از داخل خود نوتبوک نصب و بلافاصله قابل import کردن و استفاده شد.
نکته مهم در حذف پکیج از داخل نوتبوک از آنجایی که از داخل نوتبوکها امکان دادن ورودی (input) به برنامه در حال اجرا روی ترمینال (مثلا هنگام نصب پکیج توسط pip) وجود ندارد و اگر برای حذف یک پکیج نیاز به تایید یا ورود هر نوع اطلاعاتی از سمت کاربر باشد عملیات به صورت کامل انجام نمیشود باید از فلگ (flag) یا تنظیم q- به همراه دستور pip استفاده کرد.
نصب پکیج توسط ترمینال
هر نوتبوک به صورت مجزا ۴ گیگ رم و ۱ گیگ فضای ذخیرهسازی در اختیار دارد. به علاوه میتوان به صورت مستقیم از طریق ترمینال به مدیریت و کنترل محیط اختصاصی (Environment / container) نوتبوک بر روی سرور پرداخت.
ترمینال از طریق دکمه Terminal در صفحه کتابخانه نوتبوکها (Libraries) در دسترس است.
برای تست ترمینال مشخصات سرور چاپ شد.
بر اساس کرنل انتخاب شده برای نوتبوک، کرنل پایتون در مسیر جداگانهای مطابق زیر قرار دارد: کرنل python 2.7 : مسیر anaconda2_501/~ کرنل python 3.5 : مسیر anaconda3_420/~ کرنل python 3.6 : مسیر anaconda3_501/~
باید به این نکته توجه کرد که پایتون داخل نوتبوک با پایتونی که داخل ترمینال نصب است متفاوت است و در نتیجه برنامههای آنها مخصوصا pip و conda که ما نیازشان داریم هم متفاوت هستند؛ چراکه پایتون محیط ترمینال آن پایتونی است که روی سرور نصب است اما پایتونی که به عنوان کرنل نوتبوک استفاده میشود در مسیری همانند آنچه بالا گفته شد قرار دارد.
برای بررسی نکته بالا با استفاده از دستور which و اجرای which pip مسیر برنامه pip درون نوتبوک و درون ترمینال چاپ شد که مشاهده میشود درون نوتبوک، pip از درون دایرکتوری anaconda3_501 و درون ترمینال از دایرکتوری دیگری اجرا میشوند.
برای دسترسی به برنامه pip یا conda ای که پکیجهای نوتبوک را مدیریت میکند میتوان به دو صورت عمل کرد: ۱. اجرای مستقیم این برنامهها از مسیر نصبشون به این صورت که بجای دستور pip یا conda مینویسیم: [anaconda3_501/bin/[pip or conda/~ ۲. همچنین میتوان آدرس این برنامهها را به متغیر (Environment Variable) ای به نام PATH اضافه کنیم تا به راحتی و تنها با نوشتن pip یا conda در دسترس باشند. برای اینکار با وارد کردن دستور export PATH=~/anaconda3_501/bin:$PATH مسیر برنامههای نصب شده پایتون درون فولدر anaconda3_501 (این فولدر باید بر اساس کرنل انتخاب شده برای نوتبوک انتخاب شود) به متغیر PATH اضافه شده و برنامههای pip و conda (و دیگر برنامهها را) تنها با اسمشان قابل اجرا میکند.
در ادامه برای استفاده آتی ابتدا یک جمله از شکسپیر درون فایلی نوشته شد.
سپس در ترمینال برای مثال نصب پکیج توسط ترمینال، پکیج lolcat نصب شد.
همچنین با استفاده از lolcat جملهای از شکسپیر که درون فایل ذخیره شده بود چاپ شد.
آپدیت
با کلون کردن یک ریپازیتوری و اجرای نوت بوکهای آن، تغییرات روی ریپازیتوری شامل اضافه شدن فایلها، تغییر در آنها و ... درون کتابخانه سرویس Azure به صورت خودکار بروز رسانی نمیشود. به عبارت دیگر، با کلون کردن یک گیت ریپازیتوری، پروژه به ریپازیتوری سینک (sync) نمیشود. برای اینکار نیاز است تا با استفاده از git، خودمان این کتابخانه (که در واقع کلونی از کتابخانه روی GitHub) است را بروز رسانی کنیم.
برای دریافت آخرین بروزرسانیها به این صورت عمل میکنیم که ابتدا ترمینال ریپازیتوریمون رو باز میکنیم (بالاتر نحوه باز کردن توضیح داده شد) و سپس با دستور زیر به پوشه library که پوشهای است که فایلهای کلون شده از گیتهاب قرار داده شده اند میرویم:
$ cd library
در ادامه مطابق تصویر با دستور زیر بررسی میکنیم آیا تغییری در فایلهای نوت بوک دادهشده است یا خیر:
$ git status
همونطور که مشاهده میکنید تغییراتی درون فایل بعضی نوتبوکها داده شده است که در قسمت Changes not staged for commit ذکر شدهاند و فایلهایی جدید ایجاد شدهاند که در قسمت Untracked files مشخص شدهاند. لازم است قبل از بروزرسانی ریپازیتوری این تغییرات (فایلهایی که تغییر کردهاند) commit شده [در این مورد بخوانید] یا تغییرات stash شوند [در این مورد بخوانید]. دلیل اینکار این است که در طی بروز رسانی ریپازیتوری از منبع آن در گیتهاب تغییرات داده شده از دست نرفته و حتی بعدا قابل انتقال به دیگر نسخههای این ریپازیتوری باشند. اگر که تغییرات داده شده روی نوتبوکها مهم نیستند میتوانید آنها را حذف کنید.
در اینجا تغییرات را پاک کرده و فایل نوتبوکها را به حالت اول آنها برمیگردانیم. برای اینکار مطابق تصویر با دستور زیر تمامی فایلهای تغییر کرده را به حالت اولشان برمیگردانیم:
$ git checkout .
در دستور بالا به دات (. یا نقطه) در انتهای دستور دقت کنید؛ این نقطه به معنی اعمال checkout -در نظر نگرفتن تغییرات- به همه فایلهای modified (فایلهای تغییر کرده یا همان فایلهایی که در تصویر قبلی لیست شده بودند) است.
حال همانطور که از اجرای دوباره دستور git status مشخص است، تغییراتی که در فایل نوتبوکها داده بودیم حذف شده اند و نام هیچ فایلی در قسمت Changes not staged for commit ذکر نشده است.
در ادامه برای گرفتن آخرین تغییرات از ریپازیتوری گیتهاب و اضافه کردن آنها به ریپازیتوری فعلیمون مطابق تصویر از دستور زیر استفاده میکنیم:
$ git pull
پس از اجرای این دستور آخرین تغییرات به زیپازیتوری جاری در Azure اضافه میشود. همچنین همانطور که مشاهده میکنید لیست نوتبوکهای تغییر کرده به همراه میزان تغییر آنها نمایش داده شده است. حال با بازگشت به قسمت library سرویس azure، نوتبوکهای اضافه شده قابل اجرا هستند.