ایجاد یک رابط چت دو زبانه (عربی و انگلیسی) تعاملی با استفاده از Meraj-Mini متن باز Arcee AI: بهره‌گیری از شتاب‌دهنده GPU، PyTorch، Transformers، Accelerate، BitsAndBytes و Gradio

در این آموزش، ما یک دستیار چت دو زبانه را پیاده‌سازی می‌کنیم که توسط مدل Meraj-Mini شرکت Arcee پشتیبانی می‌شود و به‌طور یکپارچه در Google Colab با استفاده از T4 GPU مستقر شده است. این آموزش قابلیت‌های مدل‌های زبان متن‌باز را به نمایش می‌گذارد و در عین حال یک تجربه عملی و کاربردی در استقرار راه‌حل‌های هوش مصنوعی پیشرفته در محدودیت‌های منابع ابری رایگان ارائه می‌دهد. ما از مجموعه‌ای قدرتمند از ابزارها از جمله استفاده خواهیم کرد:

  1. مدل Meraj-Mini شرکت Arcee
  2. کتابخانه Transformers برای بارگیری و توکن‌سازی مدل
  3. Accelerate و bitsandbytes برای کوانتیزاسیون کارآمد
  4. PyTorch برای محاسبات یادگیری عمیق
  5. Gradio برای ایجاد یک رابط وب تعاملی

# فعال کردن شتاب‌دهنده GPU
!nvidia-smi --query-gpu=name,memory.total --format=csv

# نصب وابستگی‌ها
!pip install -qU transformers accelerate bitsandbytes
!pip install -q gradio

ابتدا با پرس و جو از نام GPU و حافظه کل آن با استفاده از دستور nvidia-smi، شتاب‌دهنده GPU را فعال می‌کنیم. سپس کتابخانه‌های کلیدی پایتون مانند transformers، accelerate، bitsandbytes و gradio را نصب و به‌روزرسانی می‌کند تا از وظایف یادگیری ماشین و استقرار برنامه‌های تعاملی پشتیبانی کند.

چارچوب هم ترازی هوش مصنوعی متن‌باز پیشنهادی: Parlant - کنترل رفتار عامل LLM در تعاملات رو در رو با مشتری (تبلیغ شده)


import torch
from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline, BitsAndBytesConfig

quant_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.float16,
    bnb_4bit_use_double_quant=True
)

model = AutoModelForCausalLM.from_pretrained(
    "arcee-ai/Meraj-Mini",
    quantization_config=quant_config,
    device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained("arcee-ai/Meraj-Mini")

سپس تنظیمات کوانتیزاسیون 4 بیتی را با استفاده از BitsAndBytesConfig برای بارگیری کارآمد مدل پیکربندی می‌کنیم، سپس مدل زبان سببی "arcee-ai/Meraj-Mini" را به همراه توکن‌ساز آن از Hugging Face بارگیری می‌کنیم و به‌طور خودکار دستگاه‌ها را برای عملکرد بهینه نگاشت می‌کنیم.


chat_pipeline = pipeline(
    "text-generation",
    model=model,
    tokenizer=tokenizer,
    max_new_tokens=512,
    temperature=0.7,
    top_p=0.9,
    repetition_penalty=1.1,
    do_sample=True
)

در اینجا یک خط لوله تولید متن را ایجاد می‌کنیم که برای تعاملات چت با استفاده از تابع خط لوله Hugging Face طراحی شده است. حداکثر توکن‌های جدید، دما، top_p و جریمه تکرار را برای ایجاد تعادل بین تنوع و انسجام در طول تولید متن پیکربندی می‌کند.


def format_chat(messages):
    prompt = ""
    for msg in messages:
        prompt += f"<|im_start|>{msg['role']}n{msg['content']}<|im_end|>n"
    prompt += "<|im_start|>assistantn"
    return prompt

def generate_response(user_input, history=[]):
    history.append({"role": "user", "content": user_input})
    formatted_prompt = format_chat(history)
    output = chat_pipeline(formatted_prompt)[0]['generated_text']
    assistant_response = output.split("<|im_start|>assistantn")[-1].split("<|im_end|>")[0]
    history.append({"role": "assistant", "content": assistant_response})
    return assistant_response, history

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


import gradio as gr

with gr.Blocks() as demo:
    chatbot = gr.Chatbot()
    msg = gr.Textbox(label="Message")
    clear = gr.Button("Clear History")

    def respond(message, chat_history):
        response, _ = generate_response(message, chat_history.copy())
        return response, chat_history + [(message, response)]

    msg.submit(respond, [msg, chatbot], [msg, chatbot])
    clear.click(lambda: None, None, chatbot, queue=False)

demo.launch(share=True)

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


اینجا نوت بوک Colab. همچنین، فراموش نکنید که ما را در توییتر دنبال کنید و به کانال تلگرام و گروه لینکدین ما بپیوندید. فراموش نکنید که به ساب ردیت 80k+ ML ما بپیوندید.

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

آصف رزاق مدیرعامل Marktechpost Media Inc. است. آصف به عنوان یک کارآفرین و مهندس رویایی، متعهد به مهار پتانسیل هوش مصنوعی برای خیر اجتماعی است. آخرین تلاش او راه اندازی یک پلتفرم رسانه ای هوش مصنوعی، Marktechpost است که به دلیل پوشش عمیق اخبار یادگیری ماشین و یادگیری عمیق که هم از نظر فنی sound است و هم به راحتی برای مخاطبان گسترده قابل درک است، متمایز است. این پلتفرم دارای بیش از 2 میلیون بازدید ماهانه است که نشان دهنده محبوبیت آن در بین مخاطبان است.