📄 محتوای کامل
نحوه نصب Gradio در اوبونتو
بیاموزید که چگونه Gradio را در اوبونتو نصب کنید، یک رابط وب ایجاد کنید و با استفاده از یک نام دامنه، آن را به صورت ایمن در معرض نمایش قرار دهید.
مقدمه
Gradio یک کتابخانه پایتون است که به شما امکان میدهد با استفاده از هر مدل یادگیری ماشینی (ML) مورد نظر خود، یک رابط وب ایجاد کنید. پس از یکپارچهسازی، مدل مستقیماً به عنوان یک برنامه وب مستقر میشود تا نیازهای شما را برآورده کند و برنامه را بسته به نیازهای کاربر شما مقیاسبندی کند. این مقاله نحوه استقرار Gradio روی سرور اوبونتو ۲۲.۰۴ و افشای ایمن برنامه برای دسترسی عمومی با استفاده از نام دامنه را توضیح میدهد.
الزامات
قبل از شروع :
- یک سرور جدید Ubuntu A100 Cloud GPU با حداقل ۱/۷ GPU و ۱۰ گیگابایت VRAM راهاندازی کنید.
- یک رکورد دامنه A تنظیم کنید که به آدرس IP سرور اشاره کند
- با استفاده از SSH به عنوان یک کاربر غیر ریشه با امتیازات sudo به سرور دسترسی پیدا کنید
- سرور را به روزرسانی کنید
- نصب Nginx
سرور را تنظیم کنید
- بست ههای وابستگی مدل مورد نیاز را نصب کنید.
consoleCopy
$ pip3 install realesrgan gfpgan basicsr gradio
در زیر کاری که هر یک از بستههای فوق انجام میدهند، آمده است:
- realesrgan: فرآیند بازیابی پسزمینه مدل را مدیریت میکند.
- gfpgan: فرآیندهای ترمیم چهره را انجام میدهد.
- basicsr: RRDBNET را که یک معماری شبکه عصبی عمیق است و در الگوریتمهای با وضوح بالا استفاده میشود، وارد میکند و توسط مدل GFPGAN مورد استفاده قرار میگیرد.
- gradio: رابط وب مدل را ایجاد میکند.
- پیادهسازی مدل در این مقاله از کتابخانه pandas استفاده میکند که به jinja2نسخه 3.1.2 یا بالاتر نیاز دارد. نسخه نصب شده را بررسی کنید.
consoleCopy
$ pip show jinja2
خروجی:
Name: Jinja2
Version: 3.0.3
Summary: A very fast and expressive template engine.
اگر نسخه موجود پایینتر از 3.1است، بسته jinja2 را ارتقا دهید.
$ pip install --upgrade jinja2
- یک دایرکتوری پروژه جدید به نام gradio-webapp در مسیری در کل سیستم مانند /opt/ ایجاد کنید تا فایلهای برنامه در آن ذخیره شوند.
consoleCopy
$ sudo mkdir -p /opt/gradio-webapp/
- مجوزهای مالکیت گروه کاربری خود را به دایرکتوری اعطا کنید.
consoleCopy
$ sudo chown -R :$(id -gn) /opt/gradio-webapp/
- مجوزهای دایرکتوری را روی ۷۷۵ تنظیم کنید تا کاربر بتواند فایلها را در دایرکتوری بنویسد و اجرا کند.
consoleCopy
$ sudo chmod -R 775 /opt/gradio-webapp/
یک برنامه وب Gradio جدید ایجاد کنید
یک برنامه وب Gradio جدید ایجاد کنید که از یک مدل یادگیری ماشین متنباز مانند GFPGAN که در این بخش استفاده میشود، استفاده کند. این مدل به شما امکان میدهد با آپلود یک تصویر منبع که با دو نسخه خروجی بهبود یافته است، تصاویر را بازیابی و بهبود دهید. مراحل زیر را برای ایجاد برنامه وب Gradio که توسط GFPGAN پشتیبانی میشود، دنبال کنید تا روی پورت سرور داخلی ۸۰۸۰ نمایش داده شود.
- به دایرکتوری پروژه خود بروید.
consoleCopy
$ cd /opt/gradio-webapp/
- با استفاده از یک ویرایشگر متن مانند nano، یک فایل برنامه پایتون جدید ایجاد کنید.
consoleCopy
$ nano app.py
- کد زیر را به فایل اضافه کنید.
pythonCopy
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=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
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="0.0.0.0", server_port=8080)
فایل را ذخیره کنید و ببندید.
در زیر نحوهی عملکرد توابع برنامهی فوق آمده است:
- enhance_image(): نقاط بررسی مدل و اطلاعات معماری را به همراه پارامترهای مدل بهبود چهره ذخیره میکند. مدل درون این پارامتر تعریف میشود زیرا گرادیو به یک تابع تعریفشده برای علامتگذاری آنچه که باید در رابط اجرا کند، نیاز دارد.
- rrdbnet: پارامترهای وضوح فوقالعاده تصویر را تعریف میکند.
- bg_upsampler: پارامترهای بهبود پسزمینه را تعریف میکند.
- restorer: پارامترهای بازسازی چهره را تعریف میکند.
- interface: تعریف میکند که رابط کاربری چگونه باید به نظر برسد.
- interface.launch(): دستور راهاندازی رابط کاربری برای ایجاد یک برنامه وب را مشخص میکند.
- برنامه را اجرا کنید تا مطمئن شوید که مدل به درستی شروع به کار میکند.
consoleCopy
$ 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 جدید ایجاد کنید.
consoleCopy
$ sudo nano /etc/systemd/system/my_gradio_app.service
- محتویات زیر را به فایل اضافه کنید. برای اجرای سرویس، example-user را با حساب کاربری واقعی خود جایگزین کنید.
iniCopy
[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 را مجدداً راهاندازی کنید.
consoleCopy
$ sudo systemctl daemon-reload
- سرویس را طوری فعال کنید که همزمان با بوت شدن سیستم شروع به کار کند.
consoleCopy
$ sudo systemctl enable my_gradio_app
- سرویس Gradio را شروع کنید.
consoleCopy
$ sudo systemctl start my_gradio_app
- تأیید کنید که سرویس به درستی و بدون هیچ خطایی اجرا میشود.
consoleCopy
$ 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
└─3287 /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
برای دسترسی ایمن به پورت 8080برنامه وب Gradio در اینترنت، Nginx را به عنوان یک پروکسی معکوس پیکربندی کنید تا درخواستهای اتصال از پورت 80HTTP را ارسال و مدیریت کند. برای مدیریت ایمن ترافیک ورودی، بعداً Nginx را طوری پیکربندی کنید که درخواستهای HTTPS را با یک گواهی SSL معتبر مدیریت کند. در این بخش، پیکربندیهای لازم Nginx را ایجاد کرده و دسترسی به رابط وب Gradio را آزمایش کنید.
- یک فایل پیکربندی میزبان مجازی Nginx جدید در دایرکتوری sites-available ایجاد کنید.
consoleCopy
$ sudo nano /etc/nginx/sites-available/gradio.conf
- محتویات زیر را به فایل اضافه کنید.
nginxCopy
server {
listen 80;
listen [::]:80;
server_name gradio.example.com;
location / {
proxy_pass http://127.0.0.1:8080/;
}
}
فایل را ذخیره کنید و ببندید.
- برای فعال کردن فایل پیکربندی، آن را به دایرکتوری sites-enabled لینک کنید.
consoleCopy
$ sudo ln -s /etc/nginx/sites-available/gradio.conf /etc/nginx/sites-enabled/
- پیکربندی Nginx را برای خطاها آزمایش کنید.
consoleCopy
$ 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 را مجدداً راه اندازی کنید.
consoleCopy
$ sudo systemctl restart nginx
امنیت
- تأیید کنید که فایروال پیشفرض UFW روی سرور اوبونتو شما فعال است.
consoleCopy
$ sudo ufw status
خروجی :
Status: active
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
- برای پذیرش اتصالات HTTP ورودی، پورت HTTP 80 را از طریق فایروال مجاز کنید.
consoleCopy
$ sudo ufw allow 80/tcp
- پورت HTTPS 443را مجاز کنید..
consoleCopy
$ sudo ufw allow 443/tcp
- برای ذخیره تغییرات، قوانین فایروال را مجدداً بارگذاری کنید.
consoleCopy
$ sudo ufw reload
ایمنسازی اپلیکیشن وب Gradio با گواهینامههای SSL معتبر
سرور مجازی برج میلاد
برای رمزگذاری ایمن ترافیک سرور خود، با استفاده از Certbot Let’s Encrypt Client، گواهینامههای SSL معتبر ایجاد کنید. پس از ایجاد، نام دامنه برنامه وب Gradio شما با ترافیک HTTPS و یک گواهینامه SSL معتبر محافظت میشود. مراحل زیر را برای نصب کلاینت Certbot و تولید گواهینامههای SSL با استفاده از پیکربندی Nginx خود دنبال کنید.
- Certbot را نصب کنید.
consoleCopy
$ 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 مراجعه کنید.