تغییرات اخیر

در اینجا اطلاعیه‌ها، نسخه‌ها و تغییرات جدید لیارا فهرست می‌شوند.

نحوه ساخت وب اپلیکیشن یادگیری ماشین با Gradio روی اوبونتو


۸ اردیبهشت ۱۴۰۴

Gradio یک کتابخانه متن‌باز پایتون است که کار را برای ساخت اپلیکیشن‌های وب یادگیری ماشین (Machine Learning) و یادگیری عمیق (Deep Learning) آسان می‌کند. به‌جای اینکه زمان زیادی را صرف طراحی پیچیده‌ی فرانت‌اند کنید، Gradio یک رابط کاربری ساده و کاربرپسند ایجاد می‌کند که به‌راحتی می‌توانید مدل‌های یادگیری ماشین خود را نمایش دهید.

در واقع هدف اصلی Gradio کم کردن فاصله بین مدل‌های یادگیری ماشین و کاربران است. این ابزار طوری طراحی شده است که هر فردی می‌تواند با این مدل‌ها ارتباط برقرار کند، حتی اگر هیچ تجربه‌ای در کدنویسی نداشته باشد.

Gradio کامپوننت‌های آماده برای وارد کردن داده، نمایش تصاویر، اسلایدرها و متن‌ها در اختیار شما می‌گذارد، تا بتوانید ورودی و خروجی مدل خود را تنظیم کنید. از طرفی Gradio کارهای پیچیده‌تری مانند نصب و میزبانی اپلیکیشن را برایتان ساده می‌کند.

در این مقاله، یاد می‌گیرید که چگونه وب‌اپلیکیشن یادگیری ماشین بوسیله Gradio را روی اوبونتو بسازید.

نحوه ساخت وب اپلیکیشن یادگیری ماشین با Gradio روی اوبونتو

در ادامه بخوانید:

  • پیش‌نیازها
  • مرحله اول: نصب Gradio
  • مرحله دوم: ساخت یک وب اپلیکیشن با Gradio
  • مرحله سوم: ساخت فایل Systemd برای Gradio
  • مرحله چهارم: پیکربندی Nginx به‌عنوان Reverse Proxy
  • مرحله پنجم: امن کردن وب اپلیکیشن با SSL Let’s Encrypt
  • مرحله ششم: دسترسی به وب اپلیکیشن Gradio
  • جمع‌بندی
  • سوالات متداول

پیش‌نیازها

برای استفاده از این مقاله، به ابزارهای زیر، نیاز دارید:

  • یک سرور مجازی اوبونتو با حداقل پردازنده گرافیکی (GPU) با توان پردازشی 1/7، 10 گیگابایت حافظه گرافیکی، 2 پردازنده مجازی (vCPU) و 10 گیگابایت حافظه رم.
  • یک سرور مجازی Ubuntu (ترجیحاً نسخه 22.04 به بعد) و یک کاربر غیر root یا non-root user با دسترسی‌های sudo.
  • پایتون نصب شده روی سرور مجازی. برای نصب پایتون این مقاله را مطالعه کنید.
  • تنظیم یک رکورد DNS برای سرور خود. اگر از سامانه مدیریت دامنه لیارا، استفاده می‌کنید، لطفاً به مستندات DNS آن، مراجعه کنید تا جزئیات مربوط به شیوه‌ی اضافه کردن رکوردها را ببینید.
همین الان، بدون کمترین پیچیدگی، سرور مجازی خودتون رو در کمتر از ۳۰ ثانیه، راه‌اندازی کنید.
✅ عملکرد پایدار ✅ ترافیک نامحدود ✅ هزینه به‌صرفه
خرید سرور مجازی ابری

مرحله اول: نصب Gradio

برای نصب Gradio در سرور اوبونتو با استفاده از پکیج PIP، دستور زیر را اجرا کنید:

pip3 install realesrgan gfpgan basicsr gradio

در ادامه، پکیج‌های استفاده شده در کد بالا توضیح داده شده است:

  • realesrgan: این مدل برای افزایش وضوح و کیفیت تصویر طراحی شده است.
  • gfpgan: این ابزار مبتنی بر GAN برای تولید تصاویر چهره استفاده می‌شود.
  • basicsr: یک فریمورک برای انجام وظایف Super-Resolution در بینایی ماشین.
  • gradio: این ابزار برای ساخت رابط‌های کاربری تعاملی برای مدل‌های یادگیری ماشین می‌باشد.

سپس برای بررسی نسخه Jinja2 و مطمئن شدن از سازگاری آن، می‌توانید دستور زیر را وارد کنید:

pip show jinja2

این کار به شما کمک می‌کند تا از بروز مشکلات مربوط به ناسازگاری نسخه‌ها جلوگیری کنید.

خروجی شما به صورت زیر خواهد بود:

Name: Jinja2

Version: 3.0.3

Summary: A very fast and expressive template engine.

Home-page: https://palletsprojects.com/p/jinja/

Author: Armin Ronacher

Author-email: armin.ronacher@active-4.com

License: BSD-3-Clause

Location: /usr/lib/python3/dist-packages

Requires:

Required-by: altair, gradio, torch

همانطور که در خروجی بالا می‌بینید، نسخه Jinja2 3.0.3 است. اما در این مقاله از کتابخانه Pandas استفاده می‌کنیم که به نسخه Jinja2 3.1.2 یا بالاتر نیاز دارد. حالا بیایید پکیج Jinja2 را با آخرین نسخه به‌روزرسانی کنیم.

pip install --upgrade jinja2

در ادامه، پکیج‌های دیگری برای پشتیبانی از OpenGL که جهت رندرینگ گرافیک سه‌بعدی استفاده می‌شود را با دستور زیر نصب می‌کنیم:

apt install libgl1-mesa-glx libglib2.0-0 -y

دستور بالا، کتابخانه‌های لازم OpenGL را بر روی سرور اوبونتوی شما دانلود و نصب می‌کند.

برای مطالعه و یادگیری بیشتر: هاست پایتون چیست؟ + راهنمای کامل خرید هاست Python

مرحله دوم: ساخت یک وب اپلیکیشن با Gradio

در این مرحله برای ایجاد یک وب اپلیکیشن جدید با Gradio، می‌توانید، اقدامات زیر را انجام دهید. در این قسمت فرض شده است که مدل یادگیری ماشین آموزش داده شده‌ای دارید که می‌خواهید با Gradio نمایش دهید.

اولین گام، ایجاد یک دایرکتوری برای وب اپلیکیشن شما است:

mkdir -p /opt/gradio-app/

گام بعدی، تغییر دسترسی‌ها و مالکیت این دایرکتوری است:

chown -R  root:root /opt/gradio-app/
chmod -R 775 /opt/gradio-app/

در ادامه، باید به دایرکتوری اپلیکیشن رفته و یک فایل به نام app.py بسازید.

cd /opt/gradio-app/
nano app.py

پس از ایجاد فایل، باید کد زیر را به فایل app.py اضافه کنید:

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

توضیح فریمورک‌های بالا به شرح زیر است:

  • gr: کتابخانه Gradio برای ساخت رابط‌های کاربری وب برای مدل‌های یادگیری ماشین.
  • GFPGANer: کلاس مدل GFPGAN.
  • RRDBNet: کلاس معماری RRDBNet.
  • RealESRGANer: کلاس مدل RealESRGAN.
  • numpy: کتابخانه برای عملیات عددی.
  • cv2: کتابخانه OpenCV برای بینایی کامپیوتری.
  • requests: کتابخانه برای ارسال درخواست‌های HTTP.

حالا بیایید پیکربندی مدل و تابع بهبود تصویر را تعریف کنیم تا بتوانیم ورودی‌ها را به مدل داده و خروجی بهبود یافته را دریافت کنیم:

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=3, num_out_ch=3, num_feat=64, num_block=23, num_grow_ch=32, scale=2)
    bg_upsampler = RealESRGANer(
        scale=2,
        model_path=realersgan_checkpoint,
        model=rrdbnet,
        tile=400,
        tile_pad=10,
        pre_pad=0,
        half=True
    )

    restorer = GFPGANer(
        model_path=gfpgan_checkpoint,
        upscale=2,
        arch=arch,
        channel_multiplier=2,
        bg_upsampler=bg_upsampler
    )
    
    input_image = input_image.astype(np.uint8)
    cropped_faces, restored_faces, restored_img = restorer.enhance(input_image)
    return restored_faces[0], restored_img

تابع بالا با نام (enhance_image) یک تصویر ورودی را دریافت می‌کند و با مدل‌های GFPGAN و RealESRGAN آن‌را بهبود می‌دهد.

بعد از بهبود تصاویر، باید پارامترهای رابط Gradio را به‌صورت زیر تنظیم کنید:

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."
)

توضیح پارامترهای بالا به صورت زیر است:

  • fn: تابع enhance_image که برای پردازش ورودی‌ها استفاده می‌شود.
  • inputs: بخش ورودی رابط کاربری (در اینجا تصویر).
  • outputs: بخش‌های خروجی رابط کاربری (دو تصویر: restored_faces و restored_img).
  • live: این گزینه برای فعال‌سازی به‌روزرسانی زنده در رابط Gradio استفاده می‌شود.
  • title: عنوان رابط کاربری Gradio.
  • description: توضیحات رابط کاربری Gradio.

در آخر هم، این خط کد را به فایل app.py اضافه کنید تا رابط کاربری Gradio راه‌اندازی شود:

interface.launch(server_name="0.0.0.0", server_port=8080)

سپس فایل را ذخیره کرده و خارج شوید.

بعد از انجام تنظیمات فوق، برای اینکه مطمئن شوید مدل درست کار می‌کند، کد زیر را اجرا کنید:

python3 app.py

اگر همه موارد درست تنظیم شده باشد، خروجی مشابه زیر را دریافت خواهید کرد:

  warnings.warn(
Running on local URL:  http://0.0.0.0:8080
To create a public link, set `share=True` in `launch()`.

حالا سرور Gradio با موفقیت راه‌اندازی شده است و می‌توانید آدرس http://0.0.0.0:8080 را در مرورگر خود وارد کنید و رابط گرافیکی مدل‌تان را مشاهده و تست کنید.

همچنین برای متوقف کردن اجرای اپلیکیشن، کلیدهای CTRL+C را فشار دهید تا به خط فرمان لینوکس برگردید.

با سرور مجازی ابری لیارا، سرور خود را با بالاترین عملکرد و امنیت، به‌راحتی مدیریت کنید!
✅ مقیاس‌پذیری بالا ✅ منابع اختصاصی و قابل تنظیم ✅ پشتیبانی 24/7 ✅ هزینه به‌صرفه ✅ استقرار سریع
خرید سرور مجازی ابری لیارا

مرحله سوم: ساخت فایل Systemd برای Gradio

اگر بخواهید، Gradio مانند یک سرویس دائمی روی سرور اجرا شود، بایستی یک فایل systemd برای Gradio بسازید.

برای ساخت این فایل از nano یا ویرایشگر مورد علاقه‌تان استفاده کنید:

nano /etc/systemd/system/gradio.service

با این دستور، یک فایل با نام gradio.service در دایرکتوری systemd ساخته می‌شود.

کد زیر را به این فایل اضافه کنید:

[Unit]
Description=My Gradio Web Application
[Service]
ExecStart=/usr/bin/python3 /opt/gradio-app/app.py
WorkingDirectory=/opt/gradio-app/
Restart=always
User=root
Environment=PATH=/usr/bin:/usr/local/bin
Environment=PYTHONUNBUFFERED=1
[Install]
WantedBy=multi-user.target

بعد از اینکه فایل gradio.service را ذخیره کرده و از ویرایشگر خارج شدید، باید systemd را ریلود کنید تا تغییرات اعمال شود. برای اینکار از دستور زیر استفاده کنید:

systemctl daemon-reload

در نهایت، وقت آن است که سرویس Gradio را اجرا کرده و طوری آن‌را تنظیم کنید که بعد از هر بار روشن شدن سرور، بصورت خودکار راه‌اندازی شود. بنابراین دستورات زیر را اجرا کنید:

systemctl start gradio
systemctl enable gradio

برای اینکه مطمئن شوید سرویس Gradio در حال اجرا است و خطایی ندارد، دستور زیر را وارد کنید:

systemctl status gradio

خروجی زیر نشان می‌دهد که اپلیکیشن Gradio به عنوان سرویس systemd در حال اجرا است و به‌طور خودکار راه‌اندازی خواهد شد.

● gradio.service - My Gradio Web Application

     Loaded: loaded (/etc/systemd/system/gradio.service; disabled; vendor preset: enabled)

     Active: active (running) since Sat 2024-01-13 02:49:18 UTC; 10s ago

   Main PID: 18811 (python3)

      Tasks: 9 (limit: 9410)

     Memory: 350.9M

        CPU: 10.239s

     CGroup: /system.slice/gradio.service

             └─18811 /usr/bin/python3 /opt/gradio-app/app.py

Jan 13 02:49:18 gradio systemd[1]: Started My Gradio Web Application.

Jan 13 02:49:26 gradio python3[18811]: /usr/local/lib/python3.10/dist-packages/torchvision/transforms/functional_tensor.py:5: UserWarning: The torchvision.transforms.f>

Jan 13 02:49:26 gradio python3[18811]:   warnings.warn(

Jan 13 02:49:27 gradio python3[18811]: Running on local URL:  http://0.0.0.0:8080

Jan 13 02:49:27 gradio python3[18811]: To create a public link, set `share=True` in `launch()`.

تبریک:) تا این مرحله اپلیکیشن Gradio شما به طور کامل راه‌اندازی شده است.

در ادامه Nginx را به‌عنوان پروکسی معکوس تنظیم می‌کنیم تا درخواست‌ها به درستی به اپلیکیشن شما هدایت شود، همراه ما باشید.

با ثبت‌نام در لیارا، ۱۰۰ هزار تومان اعتبار هدیه بگیرید و از سرور مجازی رایگان با کیفیت بالا و امکانات عالی استفاده کنید!
پشتیبانی ۲۴ ساعته برای کاربران سرور مجازی رایگان!
خرید سرور مجازی رایگان

مرحله چهارم: پیکربندی Nginx به‌عنوان Reverse Proxy

در این مرحله، برای اینکه عملکرد و امنیت وب اپلیکیشن Gradio افزایش پیدا کند، از Nginx به‌عنوان Reverse Proxy استفاده می‌کنیم. این کار باعث می‌شود از ویژگی‌های Nginx بهره‌مند شویم، در حالی که Gradio تمام تمرکزش را بر روی ارائه مدل‌های یادگیری ماشین قرار می‌دهد.

پیشنهاد مطالعه: Reverse proxy چیست؟

همچنین بخوانید: نحوه نصب Nginx در سرور مجازی اوبونتو Ubuntu

اکنون، برای شروع، باید پکیج‌های وب‌سرور Nginx را با دستور زیر نصب کنید:

apt install nginx -y

سپس، با دستور زیر یک فایل پیکربندی جدید با نام gradio.conf برای Nginx ایجاد کنید که مخصوص اپلیکیشن Gradio باشد:

nano /etc/nginx/conf.d/gradio.conf

کدهای زیر را به فایل gradio.conf اضافه کرده و قسمت‌های مربوطه را با مقادیر درست جایگزین کنید:

server {
    listen 80;
    server_name gradio.your_domain.com;

    location / {
        proxy_pass http://127.0.0.1:8080/;
    }
}

در کد بالا، آدرس gradio.your_domain.com را با نام دامنه یا آدرس آی پی سرور خودتان جایگزین کنید. آدرس proxy_pass را نیز به آدرس سروری که Gradio روی آن در حال اجراست، تغییر دهید. اگر Gradio روی همان سرور که Nginx در آن است و از پورت پیش‌فرض 8080 استفاده می‌کند، نیازی به تغییر این قسمت نیست و همان‌طور که هست، باقی بماند.

بیشتر بخوانید: Nginx چیست؟ درک نحوه کارکرد آن و کاربردهای اصلی

حال که فایل پیکربندی Nginx را تنظیم کردید، قبل از ری‌استارت کردن Nginx، بهتر است تنظیمات انجام شده را تست کنید.

با دستور زیر:

nginx -t

اگر همه موارد درست تنظیم شده باشد، خروجی به‌صورت زیر خواهد بود:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

در آخر هم، با دستور زیر وب سرور Nginx را راه‌اندازی مجدد کنید تا تغییرات اعمال شود:

systemctl restart nginx

حالا که Nginx به عنوان یک پروکسی معکوس برای اپلیکیشن Gradio پیکربندی شد، درخواست‌ها از طریق دامنه یا IP شما به سرور Gradio منتقل می‌شوند.

مرحله پنجم: امن کردن وب اپلیکیشن با SSL Let’s Encrypt

برای امن کردن وب اپلیکیشن Gradio با SSL از Let’s Encrypt، داده‌هایی که بین مرورگر کاربر و Gradio تبادل می‌شوند، رمزگذاری شده و با اینکار محرمانگی اطلاعات‌تان حفظ می‌شود.

برای اینکار ابتدا Certbot که کلاینت Let’s Encrypt می‌باشد را روی سرور خود نصب کنید:

apt install -y certbot python3-certbot-nginx

سپس، دستور certbot را اجرا کنید تا گواهینامه SSL را برای دامنه خود دریافت کنید. در کد زیر بجای your_domain.com دامنه واقعی خودتان را وارد کنید:

certbot --nginx -d gradio.your_domain.com -m admin@your_domain.com --agree-tos

دستور بالا، گواهینامه SSL را از Let’s Encrypt دانلود کرده و به‌طور خودکار پیکربندی Nginx را برای استفاده از SSL دریافت شده، بروز می‌کند.

خروجی:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
(Y)es/(N)o: Y
Account registered.
Requesting a certificate for gradio.your_domain.com
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/gradio.your_domain.com/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/gradio.your_domain.com/privkey.pem
This certificate expires on 2024-04-12.
These files will be updated when the certificate is renewed.
Certbot has scheduled a task to renew this certificate in the background automatically.
Deploying certificate
Successfully deployed certificate for gradio.your_domain.com to /etc/nginx/conf.d/gradio.conf
Congratulations! You have successfully enabled HTTPS on `https://gradio.your_domain.com
If you like Certbot, please consider supporting our work by:
 * Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
 * Donating to EFF:                    https://eff.org/donate-le

گواهی‌نامه‌های Let’s Encrypt معمولا نود روز اعتبار دارند. برای اینکه فرایند تمدید گواهی خودکار شود، مانند زیر یک کرون جاب تنظیم کنید:

crontab -e

خط زیر را به فایل کرون جاب اضافه کنید تا دستور certbot renew، دو بار در روز فرایند تمدید گواهی را بصورت خودکار انجام دهد:

0 */12 * * * /usr/bin/certbot renew --quiet

سپس فایل را ذخیره کرده و خارج شوید.

همچنین بخوانید: نحوه دریافت SSL در Nginx در سرور مجازی اوبونتو Ubuntu با Lets Encrypt

مرحله ششم: دسترسی به وب اپلیکیشن Gradio

در پایان این مراحل، باید وب اپلیکیشن Gradio از طریق HTTPS و با گواهی SSL معتبر Let’s Encrypt n در دسترس باشد. شما می‌توانید مرورگر خود را باز کنید و از آدرس https://gradio.your_domain.com برای دسترسی به وب‌اپلیکیشن Gradio استفاده کنید.

جمع‌بندی

در این آموزش از لیارا مراحل اصلی راه‌اندازی یک اپلیکیشن وب Gradio را بررسی کردیم. از نصب Gradio شروع کردیم و نحوه یکپارچه‌سازی آن با مدل‌های محبوب یادگیری ماشین مثل GFPGAN و RealESRGAN را نشان دادیم. همچنین افزایش امنیت و بهبود عملکرد را با پیکربندی Nginx به‌عنوان یک پروکسی معکوس و استفاده از SSL از Let’s Encrypt توضیح دادیم.

با استفاده از Gradio، کاربران می‌توانند به‌راحتی تصاویر را آپلود کرده، داده‌ها را وارد کنند و خروجی‌های مدل را از طریق یک رابط وب پویا مشاهده کنند. برای اطلاعات بیشتر می‌توانید، به مستندات رسمی رابط وب Gradio مراجعه کنید.

سوالات متداول

چطور می‌توانم مدل‌های یادگیری ماشین رو در Gradio بارگذاری کنم؟

برای اینکار کافی‌ست مدل را با استفاده از پایتون بارگذاری کنید و سپس یک رابط وب با استفاده از Gradio ایجاد کنید که به کاربران این امکان را بدهد تا ورودی‌ها را ارسال کرده و خروجی مدل را مشاهده کنند.

آیا Gradio از GPU پشتیبانی می‌کند؟

بله، Gradio می‌تواند از منابع GPU سرور برای پردازش‌های سنگین استفاده کند.

چطور می‌توانم امنیت اپلیکیشن Gradio رو افزایش دهم؟

شما می‌توانید با استفاده از پروکسی معکوس Nginx و فعال‌سازی SSL از Let’s Encrypt، امنیت اپلیکیشن Gradio را به طور چشمگیری افزایش دهید.

چطور می‌توانم اپلیکیشن Gradio رو به‌صورت خودکار اجرا کنم؟

برای اینکه اپلیکیشن Gradio به‌صورت خودکار بعد از راه‌اندازی سرور اجرا شود، می‌توانید از systemd استفاده کنید. با ایجاد یک فایل systemd، می‌توانید تنظیم کنید که اپلیکیشن Gradio در زمان بوت شدن سیستم به‌طور خودکار اجرا شود.

به اشتراک بگذارید