Intel® Arc™ GPU'larda LLM'lerin Gücünü Kullanın

tarafından Graphics Performance Lab |

Intel® Arc™ GPU'lar ile Çeşitli LLM'leri Yerel Olarak Kolayca Çalıştırın

Üretken yapay zeka, içerik oluşturmada mümkün olanın manzarasını değiştirdi. Bu teknoloji, daha önce hayal edilmemiş görüntüler, videolar ve yazılar sunma potansiyeline sahip. Büyük dil modelleri (LLM'ler), yapay zeka çağında manşetlere çıkarak herkesin şarkı sözleri oluşturmasına, karmaşık fizik sorularına yanıt almasına veya bir slayt sunumu için taslak hazırlamasına olanak tanıyor. Ve bu yapay zeka özelliklerinin artık buluta ya da abonelik hizmetlerine bağlı olması gerekmiyor. Çıktılarını özelleştirmek için model üzerinde tam kontrole sahip olduğunuz kendi bilgisayarınızda yerel olarak çalışabilirler.

Bu makalede, Intel® Arc™ A770 16GB grafik kartına sahip bir bilgisayarda popüler büyük dil modellerini (LLM'ler) nasıl kuracağınızı ve deneyeceğinizi göstereceğiz. Bu eğitimde Mistral-7B-Instruct LLM kullanılacak olsa da, aynı adımlar Phi2, Llama2 vb. gibi seçtiğiniz bir PyTorch LLM ile de kullanılabilir. Ve evet, en yeni Llama3 modeli ile de!

IPEX-LLM

Aynı temel kurulumu kullanarak çeşitli modelleri çalıştırabilmemizin nedeni IPEX-LLMPyTorch için bir LLM kütüphanesi. PyTorch'un üzerine inşa edilmiştir. PyTorch için Intel® Uzantısı ve Intel donanımı için en son performans optimizasyonları ile son teknoloji LLM optimizasyonları ve düşük bit (INT4/FP4/INT8/FP8) ağırlık sıkıştırması içerir. IPEX-LLM, Intel donanımı için Xe-Gelişmiş performans için Arc A serisi grafik kartları gibi Intel ayrık GPU'larda XMX AI hızlandırmasını çeker. Linux sürüm 2 için Windows Alt Sistemi, yerel Windows ortamları ve yerel Linux üzerinde Intel Arc A serisi grafikleri destekler.

Ve tüm bunlar yerel PyTorch olduğundan, PyTorch modellerini ve giriş verilerini yüksek performanslı hızlandırma ile Intel Arc GPU'da çalıştırmak için kolayca değiştirebilirsiniz. Bu deney bir performans karşılaştırması olmadan tamamlanamazdı. Intel Arc için aşağıdaki talimatları ve rakipler için yaygın olarak bulunan talimatları kullanarak, benzer bir fiyat segmentinde konumlandırılmış iki ayrı GPU'ya baktık.

Örneğin, IPEX-LLM kütüphanesi ile Mistral 7B modelini çalıştırırken, Arc A770 16GB grafik kartı saniyede 70 token (TPS) veya CUDA kullanan GeForce RTX 4060 8GB'den 70% daha fazla TPS işleyebilir. Bu ne anlama geliyor? Genel bir kural olarak 1 token bir kelimenin 0,75'ine eşdeğerdir ve iyi bir karşılaştırma ortalama insan okuma hızı saniyede 4 kelime veya 5,3 TPS. Arc A770 16GB ekran kartı, ortalama bir insanın okuyabileceğinden çok daha hızlı kelime üretebilir!

Dahili testlerimiz, Arc A770 16GB grafik kartının bu yeteneği ve RTX 4060'a kıyasla geniş bir model yelpazesinde rekabetçi veya lider performans sunabildiğini ve Intel Arc grafiklerini yerel LLM yürütme için mükemmel bir seçim haline getirdiğini göstermektedir.

Şimdi Arc A serisi GPU'nuzda LLM'leri kullanmaya başlamanız için kurulum talimatlarına geçelim.

Kurulum Talimatları

Ortamı ayarlamak için bu sayfaya da başvurabiliriz: IPEX-LLM'yi Intel GPU ile Windows'a yükleyin - IPEX-LLM en son belgeleri

1. Aygıt yöneticisinde tümleşik GPU'yu devre dışı bırakın.

2. İndirin ve yükleyin Anaconda.

3. Kurulum tamamlandıktan sonra Başlat menüsünü açın, Anaconda Prompt'u arayın, yönetici olarak çalıştırın ve aşağıdaki komutları kullanarak sanal bir ortam oluşturun. Her komutu ayrı ayrı girin:

conda create -n llm python=3.10.6

conda akti̇f llm

conda install libuv

pip install dpcpp-cpp-rt==2024.0.2 mkl-dpcpp==2024.0.0 onednn==2024.0.0 gradio

pip install --pre --upgrade ipex-llm[xpu] --extra-index-url https://pytorch-extension.intel.com/release-whl/stable/xpu/us/

pip install transformers==4.38.0

4. demo.py adında bir metin belgesi oluşturun ve C:\Users\Your_Username\Documents veya seçtiğiniz bir dizine kaydedin.

5. Favori editörünüzle demo.py dosyasını açın ve aşağıdaki kod örneğini içine kopyalayın:

from transformers import AutoTokenizer
from ipex_llm.transformers import AutoModelForCausalLM
ithal meşale
import intel_extension_for_pytorch

device = "xpu" # modelin yükleneceği cihaz

model_id = "mistralai/Mistral-7B-Instruct-v0.2" # huggingface model kimliği

tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, load_in_4bit=True, torch_dtype=torch.float16)
model = model.to(cihaz)

mesajlar = [
    {"rol": "kullanıcı", "içerik": "En sevdiğiniz çeşni nedir?"},
    {"rol": "asistan", "içerik": "Taze limon suyunu sıkmayı oldukça severim. Mutfakta ne pişiriyorsam ona doğru miktarda lezzet katıyor!"},
    {"rol": "kullanıcı", "içerik": "Mayonez tarifleriniz var mı?"}
]

encodeds = tokenizer.apply_chat_template(messages, return_tensors="pt")

model_inputs = encodeds.to(device)
model.to(cihaz)

generated_ids = model.generate(model_inputs, max_new_tokens=1000, do_sample=True)
decoded = tokenizer.batch_decode(generated_ids)
print(decoded[0])

Örnek koddan oluşturulan kod bu depoda.

6. demo.py dosyasını kaydedin. Anaconda'da cd komutunu kullanarak demo.py dosyasının bulunduğu dizine gidin ve Anaconda komut isteminde aşağıdaki komutu çalıştırın:

python demo.py

Artık mayonez yapmak için güzel bir tarif alabilirsiniz!

Değişen Modeller

Yukarıda kurduğumuz aynı ortamı kullanarak, demo.py'de yukarıdaki Hugging Face model kimliğini değiştirerek llama2-7B-chat-hf, llama3-8B-it, phi-2, gemma-7B-i ve stablelm2 gibi Hugging Face üzerindeki diğer popüler modelleri deneyebilirsiniz.

model_id = "mistralai/Mistral-7B-Instruct-v0.2" # huggingface model kimliği

için

model_id = "stabilityai/stablelm-2-zephyr-1_6b" # kucaklayan yüz model kimliği

Farklı modeller farklı bir transformers paketi sürümü gerektirebilir, demo.py'yi başlatırken hatalarla karşılaşırsanız, transformers'ı yükseltmek / düşürmek için aşağıdaki adımları izleyin:

  1. Anaconda İstemini Açın
  2. conda akti̇f llm
  3. pip install transformers==4.37.0

Doğrulanmış transformatör versiyonları:

Model KimliğiTransformatör paket versiyonları
meta-llama/Lama-2-7b-chat-hf4.37.0
meta-llama/Meta-Llama-3-8B-Instruct4.37.0
stabilityai/stablelm-2-zephyr-1_6b4.38.0
mistralai/Mistral-7B-Instruct-v0.24.38.0
microsoft/phi-24.38.0
google/gemma-7b-it4.38.1
THUDM/chatglm3-6b4.38.0

Bellek gereksinimleri modele ve çerçeveye göre değişebilir. IPEX-LLM ile çalışan Intel Arc A750 8GB için Llama-2-7B-chat-hf, Mistral-7B-Instruct-v0.2, phi-2 veya chatglm3-6B kullanmanızı öneririz.

Bir ChatBot WebUI Uygulama

Şimdi web tarayıcınızı kullanarak daha iyi bir deneyim için bir Gradio chatbot webui uygulamaya geçelim. LLM'lerle etkileşimli bir sohbet botu uygulama hakkında daha fazla bilgi için şu adresi ziyaret edin https://www.gradio.app/guides/creating-a-chatbot-fast

1. Seçtiğiniz metin düzenleyicisinde chatbot_gradio.py adında bir belge oluşturun.

2. Aşağıdaki kod parçacığını kopyalayıp chatbot_gradio.py dosyasına yapıştırın:

gr olarak gradio içe aktar
ithal meşale
import intel_extension_for_pytorch
from ipex_llm.transformers import AutoModelForCausalLM
from transformers import AutoTokenizer, StoppingCriteria, StoppingCriteriaList, TextIteratorStreamer
from threading import Thread

model_id = "mistralai/Mistral-7B-Instruct-v0.2"

tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(model_id, trust_remote_code=True, optimize_model=True, load_in_4bit=True, torch_dtype=torch.float16)
model = model.half()
model = model.to("xpu")
class StopOnTokens(StoppingCriteria):
    def __call__(self, input_ids: torch.LongTensor, scores: torch.FloatTensor, **kwargs) -> bool:
        stop_ids = [29, 0]
        for stop_id in stop_ids:
            if input_ids[0][-1] == stop_id:
                return True
        return False

def predict(message, history):
    stop = StopOnTokens()
    history_format = []
    for insan, asistan in geçmiş:
        history_format.append({"role": "user", "content": human })
        history_format.append({"rol": "asistan", "içerik":asistan})
    history_format.append({"role": "user", "content": message})

    prompt = tokenizer.apply_chat_template(history_format, tokenize=False, add_generation_prompt=True)
    model_inputs = tokenizer(prompt, return_tensors="pt").to("xpu")
    streamer = TextIteratorStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)
    generate_kwargs = dict(
        model_inputs,
        streamer=streamer,
        max_new_tokens=300,
        do_sample=True,
        top_p=0,95,
        top_k=20,
        sıcaklık=0,8,
        num_beams=1,
        pad_token_id=tokenizer.eos_token_id,
        stopping_criteria=StoppingCriteriaList([stop])
        )
    t = Thread(target=model.generate, kwargs=generate_kwargs)
    t.start()

    partial_message = ""
    for new_token in streamer:
        if new_token != '<':
            partial_message += new_token
            yield partial_message

gr.ChatInterface(predict).launch()

3. Yeni bir anaconda komut istemi açın ve aşağıdaki komutları girin:

  • pip gradio'yu yükleyin
  • conda akti̇f llm
  • chat_gradio.py dosyasının bulunduğu dizine cd
  • python chatbot_gradio.py

4. Web tarayıcınızı açın ve 127.0.0.1:7860 adresine gidin. mistral-7b-instruct-v0.2 dil modeli ile kurulmuş bir sohbet botu görmelisiniz! Artık sohbet botunuz için şık görünümlü bir webui'niz var.

5. Sohbet robotunuzla bir konuşma başlatmak için bir soru sorun.


Bildirimler ve Feragatnameler

Performans kullanıma, yapılandırmaya ve diğer faktörlere göre değişir. Daha fazla bilgi için Performans Endeksi sitesi.

Performans sonuçları, yapılandırmalarda gösterilen tarihler itibariyle yapılan testlere dayanmaktadır ve halka açık tüm güncellemeleri yansıtmayabilir. Yapılandırma ayrıntıları için yedeklemeye bakın. Hiçbir ürün veya bileşen tamamen güvenli olamaz.

Üretim öncesi sistemlere ve bileşenlere dayanan sonuçların yanı sıra Intel Referans Platformu (dahili bir örnek yeni sistem), dahili Intel analizi veya mimari simülasyonu veya modellemesi kullanılarak tahmin edilen veya simüle edilen sonuçlar size yalnızca bilgilendirme amacıyla sunulmaktadır. Sonuçlar, sistemlerde, bileşenlerde, teknik özelliklerde veya yapılandırmalarda gelecekte yapılacak değişikliklere bağlı olarak değişebilir.

Maliyetleriniz ve sonuçlarınız değişiklik gösterebilir.

Intel teknolojileri etkinleştirilmiş donanım, yazılım veya hizmet aktivasyonu gerektirebilir.

© Intel Corporation. Intel, Intel logosu, Arc ve diğer Intel markaları, Intel Corporation'ın veya yan kuruluşlarının ticari markalarıdır.

*Diğer isim ve markalar başkalarına ait olabilir.