نحوه نصب Gradio در اوبونتو #
مقدمه #
Gradio یک کتابخانه پایتون است که به شما امکان میدهد با استفاده از هر مدل یادگیری ماشینی (ML) مورد نظر خود، یک رابط وب ایجاد کنید. پس از یکپارچهسازی، مدل مستقیماً به عنوان یک برنامه وب مستقر میشود تا نیازهای شما را برآورده کند و برنامه را بسته به نیازهای کاربر شما مقیاسبندی کند. این مقاله نحوه استقرار Gradio روی سرور اوبونتو ۲۲.۰۴ و افشای ایمن برنامه برای دسترسی عمومی با استفاده از نام دامنه را توضیح میدهد.
الزامات #
قبل از شروع :
- یک سرور جدید Ubuntu A100 Cloud GPU با حداقل ۱/۷ GPU و ۱۰ گیگابایت VRAM راهاندازی کنید.
- یک رکورد دامنه A تنظیم کنید که به آدرس IP سرور اشاره کند
- با استفاده از SSH به عنوان یک کاربر غیر ریشه با امتیازات sudo به سرور دسترسی پیدا کنید
- سرور را به روزرسانی کنید
- نصب Nginx
سرور را تنظیم کنید #
- بست ههای وابستگی مدل مورد نیاز را نصب کنید.console
$ pip3 install realesrgan gfpgan basicsr gradioدر زیر کاری که هر یک از بستههای فوق انجام میدهند، آمده است:
realesrgan: فرآیند بازیابی پسزمینه مدل را مدیریت میکند.gfpgan: فرآیندهای ترمیم چهره را انجام میدهد.basicsr:RRDBNETرا که یک معماری شبکه عصبی عمیق است و در الگوریتمهای با وضوح بالا استفاده میشود، وارد میکند و توسط مدل GFPGAN مورد استفاده قرار میگیرد.gradio: رابط وب مدل را ایجاد میکند.
- پیادهسازی مدل در این مقاله از کتابخانه
pandasاستفاده میکند که بهjinja2نسخه۳.۱.۲یا بالاتر نیاز دارد. نسخه نصب شده را بررسی کنید.console$ pip show jinja2خروجی:
Name: Jinja2 Version: 3.0.3 Summary: A very fast and expressive template engine.اگر نسخه موجود پایینتر از
۳.۱است، بستهjinja2را ارتقا دهید.$ pip install --upgrade jinja2 - یک دایرکتوری پروژه جدید به نام
gradio-webappدر مسیری در کل سیستم مانند/opt/ایجاد کنید تا فایلهای برنامه در آن ذخیره شوند.console$ sudo mkdir -p /opt/gradio-webapp/ - مجوزهای مالکیت گروه کاربری خود را به دایرکتوری اعطا کنید.console
$ sudo chown -R :$(id -gn) /opt/gradio-webapp/
- مجوزهای دایرکتوری را روی ۷۷۵ تنظیم کنید تا کاربر بتواند فایلها را در دایرکتوری بنویسد و اجرا کند.console
$ sudo chmod -R ۷۷۵ /opt/gradio-webapp/
یک برنامه وب Gradio جدید ایجاد کنید #
یک برنامه وب Gradio جدید ایجاد کنید که از یک مدل یادگیری ماشین متنباز مانند GFPGAN که در این بخش استفاده میشود، استفاده کند. این مدل به شما امکان میدهد با آپلود یک تصویر منبع که با دو نسخه خروجی بهبود یافته است، تصاویر را بازیابی و بهبود دهید. مراحل زیر را برای ایجاد برنامه وب Gradio که توسط GFPGAN پشتیبانی میشود، دنبال کنید تا روی پورت سرور داخلی ۸۰۸۰ نمایش داده شود.
- به دایرکتوری پروژه خود بروید.console
$ cd /opt/gradio-webapp/
- با استفاده از یک ویرایشگر متن مانند
nano، یک فایل برنامه پایتون جدید ایجاد کنید.console$ nano app.py - کد زیر را به فایل اضافه کنید.python
import gradio as gr from gfpgan import GFPGANer from basicsr.archs.rrdbnet_arch import RRDBNet from realesrgan import RealESRGANer import numpy as np import cv2 import requests def enhance_image(input_image): arch = 'clean' model_name = 'GFPGANv1.4' gfpgan_checkpoint = 'https://github.com/TencentARC/GFPGAN/releases/download/v1.3.4/GFPGANv1.4.pth' realersgan_checkpoint = 'https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.1/RealESRGAN_x2plus.pth' rrdbnet = RRDBNet(num_in_ch=۳, num_out_ch=۳, num_feat=۶۴, num_block=۲۳, num_grow_ch=۳۲, scale=۲) bg_upsampler = RealESRGANer( scale=۲, model_path=realersgan_checkpoint, model=rrdbnet, tile=۴۰۰, tile_pad=۱۰, pre_pad=۰, half=True ) restorer = GFPGANer( model_path=gfpgan_checkpoint, upscale=۲, arch=arch, channel_multiplier=۲, bg_upsampler=bg_upsampler ) input_image = input_image.astype(np.uint8) cropped_faces, restored_faces, restored_img = restorer.enhance(input_image) return restored_faces[۰], restored_img interface = gr.Interface( fn=enhance_image, inputs=gr.Image(), outputs=[gr.Image(), gr.Image()], live=True, title="Face Enhancement with GFPGAN", description="Upload an image of a face and see it enhanced using GFPGAN. Two outputs will be displayed: restored_faces and restored_img." ) interface.launch(server_name="۰.۰.۰.۰", server_port=۸۰۸۰)
فایل را ذخیره کنید و ببندید.
در زیر نحوهی عملکرد توابع برنامهی فوق آمده است:
enhance_image(): نقاط بررسی مدل و اطلاعات معماری را به همراه پارامترهای مدل بهبود چهره ذخیره میکند. مدل درون این پارامتر تعریف میشود زیرا گرادیو به یک تابع تعریفشده برای علامتگذاری آنچه که باید در رابط اجرا کند، نیاز دارد.rrdbnet: پارامترهای وضوح فوقالعاده تصویر را تعریف میکند.bg_upsampler: پارامترهای بهبود پسزمینه را تعریف میکند.restorer: پارامترهای بازسازی چهره را تعریف میکند.interface: تعریف میکند که رابط کاربری چگونه باید به نظر برسد.interface.launch(): دستور راهاندازی رابط کاربری برای ایجاد یک برنامه وب را مشخص میکند.
- برنامه را اجرا کنید تا مطمئن شوید که مدل به درستی شروع به کار میکند.console
$ python3 app.pyدر صورت موفقیت، خروجی شما باید مانند تصویر زیر باشد:
Running on local URL: http://0.0.0.0:8080برای ایجاد یک لینک عمومی، در تابع
launch()مقدارshare=Trueرا قرار دهید. - برای متوقف کردن فرآیند درخواست، Control + C را فشار دهید.
برنامه وب Gradio را به عنوان یک سرویس سیستمی تنظیم کنید #
برای شروع برنامه وب Gradio به عنوان یک سرویس سیستمی و فعال کردن عملیات start, stop, status برای تأیید فرآیندهای برنامه، یک سرویس Systemd جدید راهاندازی کنید. مراحل زیر را برای ایجاد یک سرویس سیستمی جدید و آزمایش فرآیندهای برنامه وب Gradio دنبال کنید.
- یک فایل سرویس Systemd جدید ایجاد کنید.console
$ sudo nano /etc/systemd/system/my_gradio_app.service - محتویات زیر را به فایل اضافه کنید. برای اجرای سرویس،
example-userرا با حساب کاربری واقعی خود جایگزین کنید.ini[Unit] Description=My Gradio Web Application [Service] ExecStart=/usr/bin/python3 /opt/gradio-webapp/app.py WorkingDirectory=/opt/gradio-webapp/ Restart=always User=example-user Environment=PATH=/usr/bin:/usr/local/bin Environment=PYTHONUNBUFFERED=1 [Install] WantedBy=multi-user.target
فایل را ذخیره کنید و ببندید.
در زیر آنچه که اعلانهای Systemd فوق نشان میدهند، آمده است:
Description: خلاصهای از عملکرد سرویسExecStart: نحوه اجرای سرویس را مشخص میکند. در فایل فوق،Python3برای شروعapp.pyدر دایرکتوری Gradio شما اجرا میشود.WorkingDirectory: دایرکتوری فعالی که فایل پایتون شما در آن قرار دارد.Restart: رفتار راهاندازی مجدد سرویس را تعریف میکند. وقتی رویalwaysتنظیم شود، در صورت بروز خطا، سرویس بهطور خودکار راهاندازی مجدد میشود.User: کاربری را که سرویس را اجرا میکند، مشخص میکند.
- برای ذخیره تغییرات، سرویس Systemd را مجدداً راهاندازی کنید.console
$ sudo systemctl daemon-reload - سرویس را طوری فعال کنید که همزمان با بوت شدن سیستم شروع به کار کند.console
$ sudo systemctl enable my_gradio_app
- سرویس Gradio را شروع کنید.console
$ sudo systemctl start my_gradio_app - تأیید کنید که سرویس به درستی و بدون هیچ خطایی اجرا میشود.console
$ sudo systemctl status my_gradio_appخروجی :
● my_gradio_app.service - My Gradio App Loaded: loaded (/etc/systemd/system/my_gradio_app.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2023-10-13 13:50:04 UTC; 11s ago Main PID: 3287 (python3) Tasks: 4 (limit: 17871) Memory: 329.6M CGroup: /system.slice/my_gradio_app.service └─۳۲۸۷ /usr/bin/python3 /root/app.py Oct 13 13:50:04 negarnovin systemd[1]: Started My Gradio App. Oct 13 13:50:08 negarnovin python3[3287]: /usr/local/lib/python3.8/dist-packages/torchvision/transforms/functional_tensor.py:5: UserWarning: The torchvision.transforms.functional_tensor module> Oct 13 13:50:08 negarnovin python3[3287]: warnings.warn() Oct 13 13:50:08 negarnovin python3[3287]: Running on local URL: http://0.0.0.0:8080 Oct 13 13:50:08 negarnovin python3[3287]: To create a public link, set `share=True` in `launch()`.
پیکربندی Nginx به عنوان یک پروکسی معکوس برای نمایش برنامه وب Gradio #
برای دسترسی ایمن به پورت ۸۰۸۰برنامه وب Gradio در اینترنت، Nginx را به عنوان یک پروکسی معکوس پیکربندی کنید تا درخواستهای اتصال از پورت ۸۰HTTP را ارسال و مدیریت کند. برای مدیریت ایمن ترافیک ورودی، بعداً Nginx را طوری پیکربندی کنید که درخواستهای HTTPS را با یک گواهی SSL معتبر مدیریت کند. در این بخش، پیکربندیهای لازم Nginx را ایجاد کرده و دسترسی به رابط وب Gradio را آزمایش کنید.
- یک فایل پیکربندی میزبان مجازی Nginx جدید در دایرکتوری
sites-availableایجاد کنید.console$ sudo nano /etc/nginx/sites-available/gradio.conf - محتویات زیر را به فایل اضافه کنید.nginx
server { listen ۸۰; listen [::]:۸۰; server_name gradio.example.com; location / { proxy_pass http://127.0.0.1:8080/; } }
فایل را ذخیره کنید و ببندید.
- برای فعال کردن فایل پیکربندی، آن را به دایرکتوری
sites-enabledلینک کنید.console$ sudo ln -s /etc/nginx/sites-available/gradio.conf /etc/nginx/sites-enabled/ - پیکربندی Nginx را برای خطاها آزمایش کنید.console
$ sudo nginx -tخروجی :
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful - برای اعمال تغییرات، Nginx را مجدداً راه اندازی کنید.console
$ sudo systemctl restart nginx
امنیت #
- تأیید کنید که فایروال پیشفرض UFW روی سرور اوبونتو شما فعال است.console
$ sudo ufw statusخروجی :
Status: active To Action From -- ------ ---- ۲۲/tcp ALLOW Anywhere - برای پذیرش اتصالات HTTP ورودی، پورت HTTP
۸۰را از طریق فایروال مجاز کنید.console$ sudo ufw allow ۸۰/tcp
- پورت HTTPS
۴۴۳را مجاز کنید..console$ sudo ufw allow ۴۴۳/tcp
- برای ذخیره تغییرات، قوانین فایروال را مجدداً بارگذاری کنید.console
$ sudo ufw reload
ایمنسازی اپلیکیشن وب Gradio با گواهینامههای SSL معتبر #
برای رمزگذاری ایمن ترافیک سرور خود، با استفاده از Certbot Let’s Encrypt Client، گواهینامههای SSL معتبر ایجاد کنید. پس از ایجاد، نام دامنه برنامه وب Gradio شما با ترافیک HTTPS و یک گواهینامه SSL معتبر محافظت میشود. مراحل زیر را برای نصب کلاینت Certbot و تولید گواهینامههای SSL با استفاده از پیکربندی Nginx خود دنبال کنید.
- Certbot را نصب کنید.console
$ sudo apt install -y certbot python3-certbot-nginx - با استفاده از پیکربندیهای Nginx خود، یک گواهی SSL جدید ایجاد کنید.
$ sudo certbot --nginx -d gradio.example.com -m admin@example.com --agree-tos - تأیید کنید که گواهی پس از انقضا به طور خودکار تمدید میشود.
$ sudo certbot renew --dry-runاگر دستور بالا خطایی ایجاد نکرد، Certbot به طور خودکار گواهی SSL شما را هر ۹۰ روز تمدید میکند.
تست #
- با استفاده از یک مرورگر وب مانند کروم، به نام دامنه اپلیکیشن وب Gradio خود مراجعه کنید.
https://gradio.example.com
نصب Gradio در اوبونتو - یک تصویر نمونه را در بخش i
input_imageبارگذاری کنید و تأیید کنید که برنامه از منابع NEGARNOVIN GPU Server برای پردازش خروجی تصویر بهبود یافته استفاده می کند.
نتیجه گیری #
شما یک برنامه وب Gradio را روی سرور اوبونتو خود مستقر کردهاید و آن را با استفاده از نام دامنه خود برای دسترسی عمومی ایمن کردهاید. میتوانید فرآیندهای برنامه را با قابلیتهای بیشتر برای مطابقت با نیازهای کاربر خود تغییر دهید. برای اطلاعات بیشتر، به مستندات رابط وب Gradio مراجعه کنید.
