برنامه نویسی

معرفی لاما در گراویتون

Summarize this content to 400 words in Persian Lang
توجه: تصویر بنر تولید شده توسط هوش مصنوعی.

آیا کنجکاو هستید که چگونه برنامه خود را با هوش مصنوعی افزایش دهید و هزینه ها را کاهش دهید؟ کشف کنید که چگونه اجرای مدل های زبان بزرگ در AWS Graviton می تواند عملکرد لازم را با کسری از قیمت به شما ارائه دهد.

کمتر از دو سال است که ChatGPT چهره مجازی هوش مصنوعی را تغییر داده است. از آن زمان به بعد، مدل‌های زبان بزرگ (LLM) رایج شده‌اند. افزودن یک ربات چت در برنامه شما ممکن است به طور چشمگیری تعامل کاربر را افزایش دهد، اما LLM ها به زیرساخت پیچیده و پرهزینه نیاز دارند. یا آنها؟

پس از تماشای جلسه «استنتاج هوش مصنوعی مولد با استفاده از پردازنده‌های گراویتون AWS» از روز زیرساخت هوش مصنوعی AWS، الهام گرفتم تا به اشتراک بگذارم که چگونه می‌توانید یک LLM را با استفاده از همان پردازنده‌های Graviton مانند بقیه برنامه‌هایتان اجرا کنید.

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

یک نمونه Graviton را تنظیم کنید.
دنبال کردن مراحل (با برخی تغییرات) در «استقرار ربات گفتگوی مدل بزرگ زبان (LLM) در سرورهای Arm» از مرکز توسعه‌دهنده Arm به:

llama.cpp را دانلود و کامپایل کنید
دانلود مدل Llama 3.1 با استفاده از huggingface-cli
مدل را با استفاده از llama-quantize مجدداً کوانتیزه کنید تا آن را برای پلت فرم Graviton هدف بهینه کنید
مدل را با استفاده از lama-cli اجرا کنید
عملکرد را ارزیابی کنید

نمونه های مختلف گراویتون را مقایسه کنید و در مورد مزایا و معایب هر کدام بحث کنید

برای شروع به منابع اشاره کنید

پست‌های بعدی بیشتر به موارد استفاده از برنامه، هزینه‌ها و پایداری می‌پردازند.

یک نمونه Graviton را تنظیم کنید

ابتدا روی r7g.16xlarge مبتنی بر Graviton3 تمرکز می کنیم. این یک نوع نمونه رایج این روزها است. من آن را در us-west-2 اجرا خواهم کرد. با استفاده از کنسول، به EC2 Instances بروید و گزینه Launch instances را انتخاب کنید. برای تست سریع فقط چند فیلد لازم است:

نام: این به شما بستگی دارد. من با ed-blog-r7g-16xl تماس گرفته ام
تصاویر برنامه و سیستم عامل

AMI: من از سرور اوبونتو 24.04 LTS استفاده می کنم (اگر اوبونتو را انتخاب کنید پیش فرض است)
معماری: 64 بیتی را انتخاب کنید (بازو)

نوع نمونه: r7g.16xlarge

جفت کلید: یک موجود را انتخاب کنید یا یک کلید جدید ایجاد کنید

پیکربندی فضای ذخیره‌سازی: من این مقدار را تا 32 گیگابایت افزایش می‌دهم تا مطمئن شوم فضایی برای کد و مدل‌های Llama دارم.

می‌توانید پیش‌فرض‌ها را برای بقیه بگذارید، فقط روی «نمونه راه‌اندازی» بعد از خلاصه کلیک کنید.

هنگامی که نمونه شروع شد، می توانید با استفاده از روش مورد علاقه خود متصل شوید. برای سادگی، من از روش EC2 Instance Connect استفاده می کنم که یک ترمینال در پنجره مرورگر شما ارائه می دهد:

ساخت و اجرای Llama 3.1

برای ساخت و اجرای Llama 3.1، مراحل (با برخی اصلاحات) را در «استقرار یک مدل زبان بزرگ (LLM) chatbot در سرورهای Arm» از مرکز توسعه‌دهنده Arm به زیر دنبال می‌کنیم:

llama.cpp را دانلود و کامپایل کنید

ابتدا هر پیش نیازی را نصب می کنیم:

sudo apt update
sudo apt install make cmake -y
sudo apt install gcc g++ -y
sudo apt install build-essential -y

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سپس llama.cpp را کلون کرده و آن را می سازیم (the -j$(nproc) flag از تمام هسته های vCPU موجود برای سرعت بخشیدن به کامپایل استفاده می کند:

git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make -j$(nproc)

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در نهایت، می‌توانیم آن را با استفاده از پرچم راهنما آزمایش کنیم:

./llama-cli -h

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

Llama 3.1 را دانلود کنید

در مرحله بعد، یک محیط مجازی برای بسته های پایتون راه اندازی می کنیم:

sudo apt install python-is-python3 python3-pip python3-venv -y
python -m venv venv
source venv/bin/activate

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اکنون HuggingFace Hub را نصب کنید و از آن برای دانلود نسخه کوانتیزه شده 4 بیتی Llama 3.1 استفاده کنید:

pip install huggingface_hub
huggingface-cli download cognitivecomputations/dolphin-2.9.4-llama3.1-8b-gguf dolphin-2.9.4-llama3.1-8b-Q4_0.gguf –local-dir . –local-dir-use-symlinks False

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مدل را مجدداً کوانتیزه کنید

مدلی که دانلود کردیم قبلاً 4 بیت کوانتیزه شده است (نیم بایت در هر وزن). این به ما 4 برابر بهبود در اندازه مدل در مقایسه با bfloat16 اصلی (2 بایت در هر وزن) می دهد. با این حال، عرض پسوند برداری مقیاس پذیر (SVE) برای Graviton3 (2×256 بیت SVE) و Graviton4 (4×128 بیت SVE2) متفاوت است. Graviton2 SVE ندارد اما از فناوری Arm Neon 2×128 بیتی استفاده خواهد کرد. برای به حداکثر رساندن توان عملیاتی برای هر نسل، باید مدل را با طرح‌بندی بلوک‌های زیر مجدداً کمی کنید:

Graviton2: 4×4 (Q4_0_4_4)
Graviton3: 8×8 (Q4_0_8_8)
Graviton4: 4×8 (Q4_0_4_8)

برای نمونه Graviton3، مدل را با استفاده از کوانتیزه مجدد خواهیم کرد llama-quantize به شرح زیر:

./llama-quantize –allow-requantize dolphin-2.9.4-llama3.1-8b-Q4_0.gguf dolphin-2.9.4-llama3.1-8b-Q4_0_8_8.gguf Q4_0_8_8

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مدل را اجرا کنید

در نهایت می‌توانیم مدل را با استفاده از lama-cli اجرا کنیم. چند استدلال وجود دارد که از آنها استفاده خواهیم کرد:

مدل (-m): مدل بهینه شده برای Graviton3, dolphin-2.9.4-llama3.1-8b-Q4_0_8_8.gguf
Prompt (-p): به عنوان یک اعلان آزمایشی، از «ساخت یک وب سایت جذاب بصری در ده مرحله ساده انجام می شود» استفاده می کنیم.
طول پاسخ (-n): ما 512 کاراکتر می خواهیم
تعداد موضوعات (-t): ما می خواهیم از تمام 64 vCPU استفاده کنیم

این دستور این است:

./llama-cli -m dolphin-2.9.4-llama3.1-8b-Q4_0_8_8.gguf -p “Building a visually appealing website can be done in ten simple steps:” -n 512 -t 64

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

هنگامی که دستور را اجرا می کنید، باید چندین پارامتر را مشاهده کنید که به دنبال آن متن تولید شده (با دستور شروع می شود) و در نهایت آمار عملکرد چاپ می شوند:

ارزیابی عملکرد

دو خط برجسته شده در بالا عبارتند از: زمان ارزیابی سریع و زمان تولید متن. اینها دو مورد از معیارهای کلیدی برای تجربه کاربر با LLM هستند. زمان ارزیابی سریع به مدت زمانی که LLM طول می کشد تا درخواست را پردازش کند و شروع به پاسخگویی کند، مربوط می شود. زمان تولید متن عبارت است از مدت زمانی که طول می کشد تا خروجی تولید شود. در هر دو مورد، متریک را می توان بر حسب توکن در ثانیه (T/s) مشاهده کرد. برای اجرا ما می بینیم:

ارزیابی: 278.2 T/sنسل: 47.7 T/s

اگر کوانتیزاسیون استاندارد Q4_0 را با هر چیز دیگری مانند این دستور اجرا کنید:

./llama-cli -m dolphin-2.9.4-llama3.1-8b-Q4_0.gguf -p “Building a visually appealing website can be done in ten simple steps:” -n 512 -t 64

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

کاهش عملکرد را مشاهده خواهید کرد:

ارزیابی: 164.6 T/sنسل: 28.1 T/s

با استفاده از فرمت کوانتیزاسیون صحیح (Q4_0_8_8، در این مورد) شما نزدیک به 70٪ بهبود در ارزیابی و تولید خواهید داشت!

هنگامی که آزمایشات خود را تمام کردید، فراموش نکنید که نمونه را متوقف کنید!

مقایسه نمونه های مبتنی بر گراویتون

با استفاده از فرآیند بالا، می‌توانیم همان مدل را روی نمونه‌های مبتنی بر Graviton2 و Graviton4 مجهز به مشابه اجرا کنیم. با استفاده از فرمت کوانتیزاسیون بهینه برای هر یک، می‌توانیم شاهد افزایش عملکرد از نسلی به نسل دیگر باشیم:

نسل
نمونه
مقدار
Eval (T/s)
ژنرال (T/s)

گراویتون 2
r6g.16xlarge
Q4_0_4_4
175.4
25.1

گراویتون 3
r7g.16xlarge
Q4_0_8_8
278.2
42.7

گراویتون 4
r8g.16xlarge
Q4_0_4_8
341.8
65.6

تفاوت های عملکرد به دلیل پسوندهای برداری، حافظه پنهان، سرعت ساعت و پهنای باند حافظه است. ممکن است تغییراتی در تعداد کمتر vCPU/thread و هنگام استفاده از انواع نمونه‌های مختلف مشاهده کنید: هدف عمومی (M)، محاسباتی بهینه شده (C)، و غیره. Graviton4 همچنین دارای هسته‌های بیشتری در هر تراشه است، با نمونه‌های موجود تا 192 vCPU!

تعیین اینکه کدام نمونه ها نیازهای شما را برآورده می کنند به درخواست شما بستگی دارد. برای برنامه های تعاملی، ممکن است تأخیر ارزیابی کم و سرعت تولید متن بیش از 10 توک در ثانیه بخواهید. هر یک از 64 نمونه vCPU می‌تواند به راحتی نیاز تولید را برآورده کند، اما ممکن است لازم باشد اندازه مورد انتظار درخواست‌ها را برای تعیین تأخیر ارزیابی در نظر بگیرید. عملکرد Graviton2 نشان می دهد که راه حل های بدون سرور با استفاده از AWS Lambda ممکن است امکان پذیر باشد، به خصوص برای برنامه های کاربردی غیر مهم.

شروع کنید!

همانطور که می بینید، اجرای Llama در Graviton ساده است. این یک راه آسان برای آزمایش مدل ها برای برنامه های کاربردی شما است. در بسیاری از موارد، Graviton ممکن است مقرون به صرفه ترین راه برای ادغام LLM با برنامه شما باشد. در ماه های آینده این موضوع را بیشتر بررسی خواهم کرد.

در ضمن، در اینجا منابعی وجود دارد که به شما در شروع کار کمک می کند:

از آن لذت ببرید!

توجه: تصویر بنر تولید شده توسط هوش مصنوعی.

آیا کنجکاو هستید که چگونه برنامه خود را با هوش مصنوعی افزایش دهید و هزینه ها را کاهش دهید؟ کشف کنید که چگونه اجرای مدل های زبان بزرگ در AWS Graviton می تواند عملکرد لازم را با کسری از قیمت به شما ارائه دهد.

کمتر از دو سال است که ChatGPT چهره مجازی هوش مصنوعی را تغییر داده است. از آن زمان به بعد، مدل‌های زبان بزرگ (LLM) رایج شده‌اند. افزودن یک ربات چت در برنامه شما ممکن است به طور چشمگیری تعامل کاربر را افزایش دهد، اما LLM ها به زیرساخت پیچیده و پرهزینه نیاز دارند. یا آنها؟

پس از تماشای جلسه «استنتاج هوش مصنوعی مولد با استفاده از پردازنده‌های گراویتون AWS» از روز زیرساخت هوش مصنوعی AWS، الهام گرفتم تا به اشتراک بگذارم که چگونه می‌توانید یک LLM را با استفاده از همان پردازنده‌های Graviton مانند بقیه برنامه‌هایتان اجرا کنید.

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

  • یک نمونه Graviton را تنظیم کنید.
  • دنبال کردن مراحل (با برخی تغییرات) در «استقرار ربات گفتگوی مدل بزرگ زبان (LLM) در سرورهای Arm» از مرکز توسعه‌دهنده Arm به:
    • llama.cpp را دانلود و کامپایل کنید
    • دانلود مدل Llama 3.1 با استفاده از huggingface-cli
    • مدل را با استفاده از llama-quantize مجدداً کوانتیزه کنید تا آن را برای پلت فرم Graviton هدف بهینه کنید
    • مدل را با استفاده از lama-cli اجرا کنید
    • عملکرد را ارزیابی کنید
  • نمونه های مختلف گراویتون را مقایسه کنید و در مورد مزایا و معایب هر کدام بحث کنید
  • برای شروع به منابع اشاره کنید

پست‌های بعدی بیشتر به موارد استفاده از برنامه، هزینه‌ها و پایداری می‌پردازند.

یک نمونه Graviton را تنظیم کنید

ابتدا روی r7g.16xlarge مبتنی بر Graviton3 تمرکز می کنیم. این یک نوع نمونه رایج این روزها است. من آن را در us-west-2 اجرا خواهم کرد. با استفاده از کنسول، به EC2 Instances بروید و گزینه Launch instances را انتخاب کنید. برای تست سریع فقط چند فیلد لازم است:

  • نام: این به شما بستگی دارد. من با ed-blog-r7g-16xl تماس گرفته ام
  • تصاویر برنامه و سیستم عامل
    • AMI: من از سرور اوبونتو 24.04 LTS استفاده می کنم (اگر اوبونتو را انتخاب کنید پیش فرض است)
    • معماری: 64 بیتی را انتخاب کنید (بازو)
  • نوع نمونه: r7g.16xlarge
  • جفت کلید: یک موجود را انتخاب کنید یا یک کلید جدید ایجاد کنید
  • پیکربندی فضای ذخیره‌سازی: من این مقدار را تا 32 گیگابایت افزایش می‌دهم تا مطمئن شوم فضایی برای کد و مدل‌های Llama دارم.

تنظیمات راه اندازی کنسول AWS EC2

می‌توانید پیش‌فرض‌ها را برای بقیه بگذارید، فقط روی «نمونه راه‌اندازی» بعد از خلاصه کلیک کنید.

خلاصه راه اندازی AWS Console EC2

هنگامی که نمونه شروع شد، می توانید با استفاده از روش مورد علاقه خود متصل شوید. برای سادگی، من از روش EC2 Instance Connect استفاده می کنم که یک ترمینال در پنجره مرورگر شما ارائه می دهد:

ترمینال وب AWS

ساخت و اجرای Llama 3.1

برای ساخت و اجرای Llama 3.1، مراحل (با برخی اصلاحات) را در «استقرار یک مدل زبان بزرگ (LLM) chatbot در سرورهای Arm» از مرکز توسعه‌دهنده Arm به زیر دنبال می‌کنیم:

llama.cpp را دانلود و کامپایل کنید

ابتدا هر پیش نیازی را نصب می کنیم:

sudo apt update
sudo apt install make cmake -y
sudo apt install gcc g++ -y
sudo apt install build-essential -y
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سپس llama.cpp را کلون کرده و آن را می سازیم (the -j$(nproc) flag از تمام هسته های vCPU موجود برای سرعت بخشیدن به کامپایل استفاده می کند:

git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make -j$(nproc)
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در نهایت، می‌توانیم آن را با استفاده از پرچم راهنما آزمایش کنیم:

./llama-cli -h
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

Llama 3.1 را دانلود کنید

در مرحله بعد، یک محیط مجازی برای بسته های پایتون راه اندازی می کنیم:

sudo apt install python-is-python3 python3-pip python3-venv -y
python -m venv venv
source venv/bin/activate
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اکنون HuggingFace Hub را نصب کنید و از آن برای دانلود نسخه کوانتیزه شده 4 بیتی Llama 3.1 استفاده کنید:

pip install huggingface_hub
huggingface-cli download cognitivecomputations/dolphin-2.9.4-llama3.1-8b-gguf dolphin-2.9.4-llama3.1-8b-Q4_0.gguf --local-dir . --local-dir-use-symlinks False
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مدل را مجدداً کوانتیزه کنید

مدلی که دانلود کردیم قبلاً 4 بیت کوانتیزه شده است (نیم بایت در هر وزن). این به ما 4 برابر بهبود در اندازه مدل در مقایسه با bfloat16 اصلی (2 بایت در هر وزن) می دهد. با این حال، عرض پسوند برداری مقیاس پذیر (SVE) برای Graviton3 (2×256 بیت SVE) و Graviton4 (4×128 بیت SVE2) متفاوت است. Graviton2 SVE ندارد اما از فناوری Arm Neon 2×128 بیتی استفاده خواهد کرد. برای به حداکثر رساندن توان عملیاتی برای هر نسل، باید مدل را با طرح‌بندی بلوک‌های زیر مجدداً کمی کنید:

  • Graviton2: 4×4 (Q4_0_4_4)
  • Graviton3: 8×8 (Q4_0_8_8)
  • Graviton4: 4×8 (Q4_0_4_8)

برای نمونه Graviton3، مدل را با استفاده از کوانتیزه مجدد خواهیم کرد llama-quantize به شرح زیر:

./llama-quantize --allow-requantize dolphin-2.9.4-llama3.1-8b-Q4_0.gguf dolphin-2.9.4-llama3.1-8b-Q4_0_8_8.gguf Q4_0_8_8
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مدل را اجرا کنید

در نهایت می‌توانیم مدل را با استفاده از lama-cli اجرا کنیم. چند استدلال وجود دارد که از آنها استفاده خواهیم کرد:

  • مدل (-m): مدل بهینه شده برای Graviton3, dolphin-2.9.4-llama3.1-8b-Q4_0_8_8.gguf
  • Prompt (-p): به عنوان یک اعلان آزمایشی، از «ساخت یک وب سایت جذاب بصری در ده مرحله ساده انجام می شود» استفاده می کنیم.
  • طول پاسخ (-n): ما 512 کاراکتر می خواهیم
  • تعداد موضوعات (-t): ما می خواهیم از تمام 64 vCPU استفاده کنیم

این دستور این است:

./llama-cli -m dolphin-2.9.4-llama3.1-8b-Q4_0_8_8.gguf -p "Building a visually appealing website can be done in ten simple steps:" -n 512 -t 64
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

هنگامی که دستور را اجرا می کنید، باید چندین پارامتر را مشاهده کنید که به دنبال آن متن تولید شده (با دستور شروع می شود) و در نهایت آمار عملکرد چاپ می شوند:

خروجی ترمینال lama-cli

ارزیابی عملکرد

دو خط برجسته شده در بالا عبارتند از: زمان ارزیابی سریع و زمان تولید متن. اینها دو مورد از معیارهای کلیدی برای تجربه کاربر با LLM هستند. زمان ارزیابی سریع به مدت زمانی که LLM طول می کشد تا درخواست را پردازش کند و شروع به پاسخگویی کند، مربوط می شود. زمان تولید متن عبارت است از مدت زمانی که طول می کشد تا خروجی تولید شود. در هر دو مورد، متریک را می توان بر حسب توکن در ثانیه (T/s) مشاهده کرد. برای اجرا ما می بینیم:

ارزیابی: 278.2 T/s
نسل: 47.7 T/s

اگر کوانتیزاسیون استاندارد Q4_0 را با هر چیز دیگری مانند این دستور اجرا کنید:

./llama-cli -m dolphin-2.9.4-llama3.1-8b-Q4_0.gguf -p "Building a visually appealing website can be done in ten simple steps:" -n 512 -t 64
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

کاهش عملکرد را مشاهده خواهید کرد:

ارزیابی: 164.6 T/s
نسل: 28.1 T/s

با استفاده از فرمت کوانتیزاسیون صحیح (Q4_0_8_8، در این مورد) شما نزدیک به 70٪ بهبود در ارزیابی و تولید خواهید داشت!

هنگامی که آزمایشات خود را تمام کردید، فراموش نکنید که نمونه را متوقف کنید!

مقایسه نمونه های مبتنی بر گراویتون

با استفاده از فرآیند بالا، می‌توانیم همان مدل را روی نمونه‌های مبتنی بر Graviton2 و Graviton4 مجهز به مشابه اجرا کنیم. با استفاده از فرمت کوانتیزاسیون بهینه برای هر یک، می‌توانیم شاهد افزایش عملکرد از نسلی به نسل دیگر باشیم:

نسل نمونه مقدار Eval (T/s) ژنرال (T/s)
گراویتون 2 r6g.16xlarge Q4_0_4_4 175.4 25.1
گراویتون 3 r7g.16xlarge Q4_0_8_8 278.2 42.7
گراویتون 4 r8g.16xlarge Q4_0_4_8 341.8 65.6

تفاوت های عملکرد به دلیل پسوندهای برداری، حافظه پنهان، سرعت ساعت و پهنای باند حافظه است. ممکن است تغییراتی در تعداد کمتر vCPU/thread و هنگام استفاده از انواع نمونه‌های مختلف مشاهده کنید: هدف عمومی (M)، محاسباتی بهینه شده (C)، و غیره. Graviton4 همچنین دارای هسته‌های بیشتری در هر تراشه است، با نمونه‌های موجود تا 192 vCPU!

تعیین اینکه کدام نمونه ها نیازهای شما را برآورده می کنند به درخواست شما بستگی دارد. برای برنامه های تعاملی، ممکن است تأخیر ارزیابی کم و سرعت تولید متن بیش از 10 توک در ثانیه بخواهید. هر یک از 64 نمونه vCPU می‌تواند به راحتی نیاز تولید را برآورده کند، اما ممکن است لازم باشد اندازه مورد انتظار درخواست‌ها را برای تعیین تأخیر ارزیابی در نظر بگیرید. عملکرد Graviton2 نشان می دهد که راه حل های بدون سرور با استفاده از AWS Lambda ممکن است امکان پذیر باشد، به خصوص برای برنامه های کاربردی غیر مهم.

شروع کنید!

همانطور که می بینید، اجرای Llama در Graviton ساده است. این یک راه آسان برای آزمایش مدل ها برای برنامه های کاربردی شما است. در بسیاری از موارد، Graviton ممکن است مقرون به صرفه ترین راه برای ادغام LLM با برنامه شما باشد. در ماه های آینده این موضوع را بیشتر بررسی خواهم کرد.

در ضمن، در اینجا منابعی وجود دارد که به شما در شروع کار کمک می کند:

از آن لذت ببرید!

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا