Haziran 28, 2024

PoderyGloria

Podery Gloria'da Türkiye'den ve dünyadan siyaset, iş dünyası

Başvurunuza Yüksek Lisans Diplomasını Yerleştirmeye Giriş • Tarihçe

Başvurunuza Yüksek Lisans Diplomasını Yerleştirmeye Giriş • Tarihçe

El ele tutuşmak Büyük Dil Modelleri (LLM’ler) genellikle ChatGPT, Copilot ve Gemini gibi sohbet robotlarıyla ilişkilendirilir, ancak hiçbir şekilde soru-cevap tarzı etkileşimlerle sınırlı değildir. LLM’ler, IDE’lerden ofis üretkenlik paketlerine kadar her şeye giderek daha fazla entegre ediliyor.

İçerik oluşturmanın ötesinde, bu modeller örneğin yazma duyarlılığını ölçmek, belgelerdeki temaları belirlemek veya veri kaynaklarını uygun eğitim, yönlendirmeler ve güvenlik önlemleriyle temizlemek için kullanılabilir. Görünen o ki, oldukça genişletilebilir çıkarım motorları sayesinde, bazı dil tabanlı analizleri eklemek için uygulama kodunuza bu amaçlarla bir MBA eklemek hiç de zor değil; Lama.cpp veya vLLM. Bu motorlar modelin yüklenmesi, ayrıştırılması ve çıkarımların yapılması işlemlerini üstlenir.

Orta seviye veya üst seviye geliştiricileri hedef alan bu uygulamalı eğitimde, Rust’ta yazılmış nispeten yeni bir LLM motoruna göz atacağız: mistral.rs.

Bu açık kaynak kodu, yalnızca projenin ismine ilham kaynağı gibi görünen Mistral girişiminin modellerini değil, giderek artan sayıda popüler modeli de destekliyor. Ek olarak Mistral.rs, Python, Rust veya OpenAI uyumlu API’ler kullanılarak projelerinize entegre edilebilir, bu da yeni veya mevcut projelere dahil edilmesini nispeten kolaylaştırır.

Ancak Mistral.rs’ı nasıl çalıştıracağımıza veya kodunuzda üretken yapay zeka modelleri oluşturmak için kullanabileceğiniz farklı yöntemlere geçmeden önce donanım ve yazılım gereksinimlerini tartışmamız gerekiyor.

Donanım ve yazılım desteği

Doğru etiketlerle Mistral.rs, Nvidia CUDA, Apple Metal ile çalışır veya doğrudan CPU’nuz üzerinde çalışabilir, ancak kendi CPU’nuzu seçerseniz performans çok daha yavaş olacaktır. Bu yazının yazıldığı sırada platform henüz AMD veya Intel GPU’ları desteklemiyor.

Bu kılavuzda Mistral.rs’ın Ubuntu 22.04’te dağıtımına bakacağız. Sürücü macOS’u destekliyor ancak basitlik adına bu sefer Linux’u tercih edeceğiz.

En az 8 GB vRAM’e sahip bir GPU veya CPU’nuzda çalışıyorsa en az 16 GB sistem belleği öneririz; kat edeceğiniz mesafe modele göre değişebilir.

Nvidia kullanıcıları ayrıca devam etmeden önce en son özel sürücülerin ve CUDA ikili dosyalarının kurulu olduğundan emin olmak isteyeceklerdir. Bunu ayarlama hakkında daha fazla bilgi bulabilirsiniz Burada.

Bağımlılıklarımızı devralmak

Mistral.rs’ı yüklemek oldukça basittir ve özel kullanım durumunuza bağlı olarak biraz değişiklik gösterir. Başlamadan önce bağımlılıkları ortadan kaldıralım.

Mistral.rs web sitesine göre Astarİhtiyacımız olan sadece iki paket libssl-dev ve pkg-config’tir. Ancak kurulumu tamamlamak için bazı ek paketlerin gerekli olduğunu gördük. Bizim gibi Ubuntu 22.04 çalıştırdığınızı varsayarak aşağıdaki komutu çalıştırarak kurabilirsiniz:

sudo apt install curl wget python3 python3-pip git build-essential libssl-dev pkg-config

Bu yapıldıktan sonra Rustup betiğini çalıştırarak Rust’u kurup etkinleştirebiliriz.

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
. "$HOME/.cargo/env"

Evet, buna betiğin indirilmesi ve hemen çalıştırılması da dahildir; Komut dosyasını çalıştırmadan önce incelemeyi tercih ederseniz, bunun kodu: Burada.

READ  CES 2022'de birinci günün öne çıkan özellikleri: Sony, Samsung'un 899 dolarlık taşınabilir projektörü PlayStation VR 2'yi ve daha fazlasını onayladı

Varsayılan olarak Mistral.rs, modelleri bizim adımıza getirmek için Hugging Face’i kullanır. Bu dosyaların birçoğu yayınlanmadan önce oturum açmanızı gerektirdiğinden, Huggingface_hub’ı aşağıdakileri çalıştırarak yüklememiz gerekecek:

pip install --upgrade huggingface_hub
huggingface-cli login

Siteyi ziyaret ederek oluşturabileceğiniz Hugging Face erişim kodunuzu girmeniz istenecektir. Huggingface.co/settings/tokens.

Mistral.rs’yi yükleyin

Bağımlılıklarımızı kurduktan sonra Mistral.rs’ın dağıtımına geçebiliriz. Başlamak için kullanacağız git Mistral.rs’ın en son sürümünü GitHub’dan almak ve çalışma dizinimize gitmek için:

git clone https://github.com/EricLBuehler/mistral.rs.git
cd mistral.rs

Sisteminizin nasıl yapılandırıldığına veya ne tür bir hızlandırıcı kullandığınıza bağlı olarak işlerin biraz zorlaştığı yer burasıdır. Bu durumda Mistral.rs’da CPU tabanlı (yavaş) ve CUDA tabanlı (hızlı) çıkarımı ele alacağız.

CPU tabanlı çıkarım için basitçe aşağıdakileri gerçekleştirebiliriz:

cargo build --release

Bu arada, Nvidia tabanlı sistemlere sahip olanlar şunları çalıştırmak isteyecektir:

cargo build --release --features cuda

Bu bölümün tamamlanması birkaç dakika sürebilir, bu nedenle beklerken bir fincan çay veya kahve içmek isteyebilirsiniz. Yürütülebilir dosyanın derlenmesi tamamlandıktan sonra onu çalışma dizinimize kopyalayabiliriz:

cp ./target/release/mistralrs-server ./mistralrs_server

Mistral testi.rs

Mistral.rs’ı yükledikten sonra, Mistral-7b-Instruct gibi bir test örneğini etkileşimli modda çalıştırarak gerçekten çalıştığını doğrulayabiliriz. Yaklaşık 20 GB veya daha fazla vRAM’e sahip bir GPU’nuz olduğunu varsayarak şunları çalıştırabilirsiniz:

./mistralrs_server -i plain -m mistralai/Mistral-7B-Instruct-v0.3 -a mistral

Ancak GPU’nuzun, modeli tasarlandığı 16 bit çözünürlükte çalıştırmak için gerekli belleğe sahip olmaması muhtemeldir. Bu ayrıntı düzeyinde milyar parametre başına 2 GB belleğe ve ek anahtar/değer önbellek kapasitesine ihtiyacınız vardır. CPU’nuza yaymak için yeterli sistem belleğiniz olsa bile performansın çok düşük olmasını bekleyebilirsiniz çünkü bellek bant genişliğiniz hızla darboğaz haline gelecektir.

Bunun yerine modeli daha makul bir boyuta küçültmek için nicelemeyi kullanmak istiyoruz. Mistral.rs’da bunu yapmanın iki yolu vardır. Birincisi, tam boyutlu modeli indirecek ve daha sonra onu istenen boyuta göre nicelendirecek yerinde nicelemeyi kullanmaktır. Bu durumda modeli 16 bitten 4 bit’e düşüreceğiz. Bunu ekleyerek yapabiliriz --isq Q4_0 Bunun gibi önceki komuta:

./mistralrs_server -i --isq Q4_0 plain -m mistralai/Mistral-7B-Instruct-v0.3 -a mistral

Not: Mistral.rs tamamlanmadan önce çökerse, muhtemelen yeterli sistem belleğiniz yoktur ve işlemi tamamlamak için bir takas dosyası eklemeniz gerekebilir (24 GB’lik bir dosya ekledik). Bir takas dosyası ekleyebilir ve bunu geçici olarak etkinleştirebilirsiniz – yalnızca yeniden başlatmanın ardından dosyayı silmeyi unutmayın – aşağıdakileri çalıştırarak:

sudo fallocate -l 24G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

Form boyutunu seçtikten sonra formu sorgulamaya başlayabileceğiniz bir sohbet arayüzü ile karşılaşmalısınız. Ayrıca modelin çok daha az bellek (testlerimizde 5,9 GB civarında) kullandığını ve performansın çok daha iyi olması gerektiğini de unutmamalısınız.

READ  Yeni Motorola Edge 9 Aralık'ta gelecek, ancak Çin'e özel olabilir

Ancak modelinizi anında nicelememeyi tercih ederseniz Mistral.rs ayrıca önceden nicelenmiş GGUF ve GGML dosyalarını da destekler; bunlar Hugging Face’teki Tom “TheBloke” Jobbins’ten.

Süreç oldukça benzer ancak bu sefer GGUF şablonunu çalıştırdığımızı belirtmemiz ve istediğimiz LLM dosyasının kimliğini ve adını ayarlamamız gerekecek. Bu durumda TheBloke’un 4 bit kuantum versiyonunu Mistral-7B-Instruct’tan indireceğiz.

./mistralrs_server -i gguf --quantized-model-id TheBloke/Mistral-7B-Instruct-v0.2-GGUF --quantized-filename mistral-7b-instruct-v0.2.Q4_0.gguf

LLM’nizi işe koyun

Bir terminalde etkileşimli bir sohbet robotu çalıştırmak harikadır, ancak yapay zeka destekli uygulamalar oluşturmak için tam olarak kullanışlı değildir. Alternatif olarak Mistral.rs, Rust veya Python API’leri kullanılarak veya OpenAI API uyumlu bir HTTP sunucusu aracılığıyla kodunuza entegre edilebilir.

Başlangıç ​​olarak, muhtemelen kullanımı en kolay olan HTTP sunucusuna bağlanmaya bakacağız. Bu örnekte, son örneğimizle aynı 4 bitlik Mistral-7B kuantize edilmiş modelini kullanacağız. Mistral.rs’ı etkileşimli modda çalıştırmak yerine değiştirdiğimizi unutmayın. -i ile -p Sunucuya erişmek istediğimiz portu sağlıyoruz.

./mistralrs_server -p 8342 gguf --quantized-model-id TheBloke/Mistral-7B-Instruct-v0.2-GGUF --quantized-filename mistral-7b-instruct-v0.2.Q4_0.gguf

Sunucu çalışır hale geldiğinde, ona programlı olarak birkaç farklı yoldan erişebiliriz. İlki kullanmak olacaktır curl Vermek istediğimiz talimatları forma iletmek için. Burada şu soruyu soruyoruz: “Makine öğrenmesinde transformatör nedir?”

curl http://localhost:8342/v1/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer EMPTY" \
-d '{
"model": "Mistral-7B-Instruct-v0.2-GGUF",
"prompt": "In machine learning, what is a transformer?"
}'

Birkaç saniye sonra form, JSON formatında sıralı bir metin bloğunun çıktısını vermelidir.

OpenAI Python kütüphanesini kullanarak da bununla etkileşime girebiliriz. Ancak, muhtemelen bunu kullanarak yüklemeniz gerekecektir. pip İlk önce:

pip install openai

Daha sonra görevleri tamamlamak için yazılan buna benzer bir şablon kullanarak Mistral.rs sunucusuna bağlanabilirsiniz.

import openai

query = "In machine learning, what is a transformer?" # The prompt we want to pass to the LLM

client = openai.OpenAI(
    base_url="http://localhost:8342/v1", #The address of your Mistral.rs server
    api_key = "EMPTY"
)

completion = client.completions.create(
    model="",
    prompt=query,
    max_tokens=256,
    frequency_penalty=1.0,
    top_p=0.1,
    temperature=0,
)

print(completion.choices[0].text)

Mistral.rs Github deposunda HTTP sunucusuyla nasıl çalışılacağını gösteren daha fazla örnek bulabilirsiniz. Burada.

Mistral.rs’ı projelerinize daha derinlemesine entegre edin

Uygun olmasına rağmen, Mistral.rs’ı projelerimize entegre etmenin tek yolu bir HTTP sunucusu değildir. Benzer sonuçları Rust veya Python API’lerini kullanarak da elde edebilirsiniz.

Mistral.rs deposundan, Mistral-7B-Instruct’a bir sorgu iletmek ve bir yanıt oluşturmak için projenin bir Rust kutusu (Rust dünyasının kitaplık dediği şey) olarak nasıl kullanılacağını gösteren temel bir örneği burada bulabilirsiniz. Not: Bazı değişiklikler yapmamız gerektiğini tespit ettik. Orijinal örnek kod açmak için.

use std::sync::Arc;
use std::convert::TryInto;
use tokio::sync::mpsc::channel;

use mistralrs::{
    Constraint, Device, DeviceMapMetadata, GGUFLoaderBuilder, GGUFSpecificConfig, MistralRs,
    MistralRsBuilder, ModelDType, NormalRequest, Request, RequestMessage, Response, SamplingParams,
    SchedulerMethod, TokenSource,
};

fn setup() -> anyhow::Result> {
    // Select a Mistral model
    // We do not use any files from HF servers here, and instead load the
    // chat template from the specified file, and the tokenizer and model from a
    // local GGUF file at the path `.`
    let loader = GGUFLoaderBuilder::new(
        GGUFSpecificConfig { repeat_last_n: 64 },
        Some("mistral.json".to_string()),
        None,
        ".".to_string(),
        "mistral-7b-instruct-v0.2.Q4_K_M.gguf".to_string(),
    )
    .build();
    // Load, into a Pipeline
    let pipeline = loader.load_model_from_hf(
        None,
        TokenSource::CacheToken,
        &ModelDType::Auto,
        &Device::cuda_if_available(0)?,
        false,
        DeviceMapMetadata::dummy(),
        None,
    )?;
    // Create the MistralRs, which is a runner
    Ok(MistralRsBuilder::new(pipeline, SchedulerMethod::Fixed(5.try_into().unwrap())).build())
}

fn main() -> anyhow::Result {
    let mistralrs = setup()?;

    let (tx, mut rx) = channel(10_000);
    let request = Request::Normal(NormalRequest {
        messages: RequestMessage::Completion {
            text: "In machine learning, what is a transformer ".to_string(),
            echo_prompt: false,
            best_of: 1,
        },
        sampling_params: SamplingParams::default(),
        response: tx,
        return_logprobs: false,
        is_streaming: false,
        id: 0,
        constraint: Constraint::None,
        suffix: None,
        adapters: None,
    });
    mistralrs.get_sender().blocking_send(request)?;

    let response = rx.blocking_recv().unwrap();
    match response {
        Response::CompletionDone(c) => println!("Text: {}", c.choices[0].text),
        _ => unreachable!(),
    }
    Ok(())
}

Bunu kendiniz test etmek istiyorsanız mevcut dizinden çıkıp yeni bir Rust proje klasörü oluşturarak ve bu dizine girerek başlayın. Onu kullanabiliriz cargo new Projeyi oluşturmak için önerilen, ancak bu sefer adımları görebilmeniz için bunu manuel olarak yapacağız.

cd ..
mkdir test_app
cd test_app

Oraya vardığınızda bir dosyayı kopyalamanız gerekecek mistral.json Şablon: ../mistral.rs/chat_templates/ Ve indir mistral-7b-instruct-v0.2.Q4_K_M.gguf Hugging Face’den örnek dosya.

READ  World of Warcraft, 'Eternity's End' içerik güncellemesini duyurdu

Daha sonra oluşturacağız Cargo.toml Uygulamayı oluşturmak için ihtiyacımız olan bağımlılıkları içeren bir dosya. Bu dosya projenizle ilgili Rust takım zinciri ayrıntılarını anlatır. Bu .toml dosyasının içine aşağıdakini yapıştırın:

[package]
name = "test_app"
version = "0.1.0"
edition = "2018"

[dependencies]
tokio = "1"
anyhow = "1"
mistralrs = { git = "https://github.com/EricLBuehler/mistral.rs.git", tag="v0.1.18", features = ["cuda"] }

[[bin]]
name = "main"
path = "test_app.rs"

Not: Kaldırmak isteyeceksiniz , features = ["cuda"] GPU hızlandırmayı kullanmıyorsanız bölüm.

Son olarak yukarıdaki demo uygulamasının içeriğini adlı bir dosyaya yapıştırın. test_app.rs.

Bu dört dosyayla test_app.rs, Cargo.toml, mistral-7b-instruct-v0.2.Q4_K_M.ggufVe mistral.json Aynı klasörde aşağıdakileri çalıştırarak çalışıp çalışmadığını test edebiliriz:

cargo run

Yaklaşık bir dakika sonra sorgumuzun cevabının ekranda göründüğünü görmelisiniz.

Açıkçası bu inanılmaz derecede ilkel bir örnek, ancak kutuyu entegre ederek ve kütüphane arayüzünü kullanarak Mistral.rs’ın LLM’leri Rust uygulamalarınıza entegre etmek için nasıl kullanılabileceğini gösteriyor.

Mistral.rs’ı Python veya Rust projelerinizde kullanmakla ilgileniyorsanız, sitesine göz atmanızı önemle tavsiye ederiz. dokümantasyon Daha fazla bilgi ve örnekler için.

Yakında size Yüksek Lisans’ın kullanımıyla ilgili daha fazla hikaye sunmayı umuyoruz, bu nedenle yorumlarda bundan sonra neleri keşfetmemiz gerektiğini bize bildirdiğinizden emin olun. ®


Editörün Notu: Nvidia, bu hikayeyi ve buna benzer diğerlerini desteklemek için The Register’a bir RTX A6000 Ada Generation grafik kartı sağladı. Nvidia’nın bu makalenin içeriğiyle ilgili herhangi bir girişi yoktu.