Bu blog yazısında, MosaicML'in ChatGPT rakibi MPT-7B'yi kendi AWS SageMaker örneğinizde çalıştırma sürecinde size adım adım yol göstereceğim.
ChatGPT'nin yetenekleri konusunda heyecanlı mısınız, ancak hassas verilerinizin OpenAI'ye ifşa edilmesi konusunda endişeleriniz mi var? Neyse ki kendi altyapınızda çalıştırabileceğiniz alternatifler var. Böyle bir alternatif, ChatGPT'nin rakibi olan MosaicML MPT-7b'dir ve bu blog yazısında bunu inceleyeceğiz.
Yakın zamanda Databricks tarafından 1,3 milyar dolara satın alınan MosaicML, ChatGPT'nin sözde rakibi olan MPT-7B modeliyle makine öğrenimi topluluğunda ses getiriyor. Verdiği söze rağmen, bu modeli çalıştırmak, belgelerin az olması ve yoğun kaynak gereksinimleri nedeniyle göz korkutucu olabilir. Bununla birlikte, MPT-7B, yeni başlayanlar için uygun ve hızlı yineleme için son derece esnek bir ortam olan Jupyter dizüstü bilgisayardaki AWS SageMaker'da çalıştırılabilir. Bu kurulum, üretime geçmeye karar vermeden önce modelin fizibilitesini ve donanım gereksinimlerini test etmenize olanak tanır.
MPT-7B'yi AWS SageMaker'da bir Jupyter dizüstü bilgisayarda çalıştırmak çeşitli avantajlar sağlar. Yalnızca kullandığınız kadar ödeyip işiniz bittiğinde onu kapatmakla kalmaz, aynı zamanda modeli yeniden yüklemeye gerek kalmadan kodunuzun bazı bölümlerini kolayca yeniden çalıştırma yeteneği, yinelemeli geliştirme sırasında zaman tasarrufu sağlar. Ama dikkatli olun! Not defteri bulut sunucularınızı durdurmayı unutursanız ücretler hızla artabilir.
Bu yöntem nispeten uygun olsa da dikkate almanız gereken bazı hususlar vardır. İlk olarak, modelin yüklenmesi yüksek performanslı bir GPU'da bile 20 dakikaya kadar sürebiliyor ve bu da bu işlemi biraz zaman alıcı hale getiriyor. Ayrıca işletme maliyeti saat başına en az 4$ olduğundan maliyet de dikkate alınması gereken bir faktördür. MPT-7B'yi en az bir p3.2xlarge örneğinde çalıştırmanız gerekir; daha küçük bir şey mümkün görünmüyor. SageMaker yerine EC2'yi tercih ederseniz p3.2xlarge bulut sunucusunu kullanmak için AWS'den izin istemeniz gerekir.
Sonraki bölümlerde MPT-7B modelini kendi SageMaker jupyter dizüstü bilgisayarınızda nasıl çalıştıracağınızı adım adım anlatacağım:
AWS Konsolunu çalıştırın ve SageMaker'ı arayın:
Sol taraftaki menüden Notebook->Notebook örnekleri'ni seçin:
Not defteri örneği oluştur düğmesini tıklayın:
Bir örnek adı belirtin. m1.p3.2xlarge bulut sunucusu tipini seçin. Ne yazık ki, m1.p3.2xlarge kadar güçlü bir örneğin gerekli olduğu görülüyor, aksi takdirde örneğinizin belleği dolabilir veya en basit sorulara bile yanıt vermek çok fazla zaman alabilir. Ancak, bu örneğin saat başına yaklaşık 4 ABD Doları tutarında bir maliyete sahip olacağını lütfen unutmayın, bu nedenle kullanımınızı dikkatle izlemeniz önemlidir.
Test ortamınızda özellikle hassas veriler yoksa Herhangi bir S3 klasörüne erişim izni verebilirsiniz. Aksi halde daha açıklayıcı olmanız gerekir.
Not defteri daha sonra Beklemede durumunda olacaktır. Bu muhtemelen yaklaşık 10 dakika sürecektir:
Bu arada, AWS SageMaker örneğinin hazırlığı tamamlandıktan sonra yükleyebilmek için bir not defteri indireceğiz.
AWS SageMaker.ipynb'de MPT-7B adresindeki dizüstü bilgisayara gidin ve indirin:
Bu not defterinde iki ana kod bloğunu göreceksiniz. İlk blok MPT-7B tokenizerını ve modelini yükler:
from torch import cuda, bfloat16 from transformers import AutoTokenizer, AutoModelForCausalLM, AutoConfig device = f'cuda:{cuda.current_device()}' if cuda.is_available() else 'cpu' tokenizer = AutoTokenizer.from_pretrained("mosaicml/mpt-7b-chat", trust_remote_code=True) config={"init_device": "meta"} model = AutoModelForCausalLM.from_pretrained("mosaicml/mpt-7b-chat", trust_remote_code=True, config=config, torch_dtype=bfloat16) print(f"device={device}") print('model loaded')
Tokenizer, modele gönderilen soruyu kodlamak ve modelden gelen yanıtın kodunu çözmek için kullanılır. Ek olarak, modeli daha sonra kullanacak şekilde yapılandırabilmek için GPU'muzun cihaz özelliklerini de alıyoruz:
import time from IPython.display import Markdown import torch from transformers import StoppingCriteria, StoppingCriteriaList # mtp-7b is trained to add "<|endoftext|>" at the end of generations stop_token_ids = [tokenizer.eos_token_id] # Define custom stopping criteria object. # Source: https://github.com/pinecone-io/examples/blob/master/generation/llm-field-guide/mpt-7b/mpt-7b-huggingface-langchain.ipynb class StopOnTokens(StoppingCriteria): def __call__(self, input_ids: torch.LongTensor,scores: torch.FloatTensor, **kwargs) -> bool: for stop_id in stop_token_ids: if input_ids[0][-1] == stop_id: return True return False stopping_criteria = StoppingCriteriaList([StopOnTokens()]) def ask_question(question, max_length=100): start_time = time.time() # Encode the question input_ids = tokenizer.encode(question, return_tensors='pt') # Use the GPU input_ids = input_ids.to(device) # Generate a response output = model.generate( input_ids, max_new_tokens=max_length, temperature=0.9, stopping_criteria=stopping_criteria ) # Decode the response response = tokenizer.decode(output[:, input_ids.shape[-1]:][0], skip_special_tokens=True) end_time = time.time() duration = end_time - start_time display(Markdown(response)) print("Function duration:", duration, "seconds")
Gerekli olan stopping_critera
kullanımına dikkat edin, aksi halde model sorumuzu yanıtladıktan sonra bile gevezelik etmeye başlayacaktır.
Farklı seçenekleri keşfetmek istiyorsanız model oluşturma parametrelerine bakın.
Şimdi bu not defterini SageMaker'a yükleyelim.
Bu zamana kadar SageMaker not defteri örneğinizin sağlanmasının tamamlandığını umuyoruz. Açıldığında Jupyter'ı Aç bağlantısını tıklayın:
Ardından ekranınızın sağ üst köşesindeki Yükle düğmesini tıklayın ve az önce indirdiğiniz not defterini seçin:
Çekirdeği conda_python3 olarak ayarlayın:
Hücreyi Seç -> Tümünü Çalıştır :
Daha sonra tarayıcı sekmesinde bir kum saati logosu görünecektir:
Daha sonra modelin indirilmesi için yaklaşık 10 dakika beklemeniz gerekecektir:
Çalıştırıldıktan sonra Bana nükleer fisyon ve füzyon arasındaki farkı açıklayın sorusunun cevabını göreceksiniz:
Model ve belirteç yukarıda zaten yüklendiğinden, ask_question kod bloğunu değiştirebilir ve başka sorular sormak için Çalıştır düğmesine tıklayabilirsiniz. Bu sizi her yeni soruyu test etmek istediğinizde 10 dakika harcamaktan kurtaracaktır.
Modeli test etmeyi bitirir bitirmez dizüstü bilgisayar bulut sunucuları listenize geri dönüp onu durdurmak isteyeceksiniz. Bunu yapmazsanız saatte 4$ çok hızlı bir şekilde artacaktır 💸
Performans açısından ön testlerim MPT-7B'nin sonuçlarının ChatGPT'ler kadar iyi olmayabileceğini gösteriyor. Aşağıdaki gibi soruları yanıtlayarak iyi bir iş çıkarıyor:
Ancak "Belize'nin başkenti nedir?" oldukça korkunç bir şekilde başarısız oluyor:
Şu anda daha fazla veri topluyorum ve bir sonraki blog yazısında kapsamlı bir karşılaştırmalı analiz yapacağım. Bu yazıda MPT-7B, MPT-30B, Falcon-40b ve ChatGPT'nin soru-cevap performansını gerçek konuşma geçmişini kullanarak karşılaştıracağım.
Test aşamasından üretim aşamasına geçmeye hazır olduğunuzda SageMaker ek bir avantaj sunar: modeliniz için bir uç nokta oluşturma yeteneği. SageMaker ile talebe göre uç noktaya kadar otomatik ölçeklendirme yaparak kaynaklarınızı optimize edebilirsiniz.
Jupyter not defterinde çalışırken işleminizin çatallanmasının ve belleğinin tükenmesinin kolay olduğunu unutmayın. Böyle bir durumda çekirdeği kapatın ve tüm komutları yeniden çalıştırın.
Bu modeli AWS dışında bir platformda çalıştırmayı merak ediyorsanız, Google Colab Pro ayda 9 ABD doları karşılığında başka bir uygun seçenektir. Ancak testlerimize dayanarak sağlanan kredileri yalnızca birkaç saat içinde tükettiğimizi gördük. 😳
Karşılaşabileceğiniz diğer bir zorluk da CUDA sürümü uyumsuzluğu nedeniyle SageMaker'da Triton optimizasyonunun kullanılamamasıdır. Ne yazık ki AWS'nin mevcut P3 bulut sunucuları güncel bir CUDA sürümünü içermiyor. Bu nedenle Triton optimizasyonunu kullanmak istiyorsanız komut satırı erişimine sahip bir EC2 konteyneri oluşturmanız gerekecektir. Ancak 8 VCPU'lu bir bulut sunucusunu çalıştırmak için AWS Support'tan özel izne de ihtiyacınız olacağını unutmayın. Gelecekteki bir gönderide Triton'un nasıl entegre edileceğine ve Lambda Labs gibi daha uygun maliyetli bir GPU bulut sağlayıcısının nasıl kullanılacağına dair ayrıntılı bir kılavuz sunacağım.
MosaicML'in MPT-7B'si, OpenAI'nin ChatGPT'sine uygun bir alternatif sunarken, kendi zorluklarını da beraberinde getiriyor. Modelin çalıştırılması zaman alıcı, pahalı olabilir ve mevcut belgeler eksik olabilir. Ancak modeli şirket içinde tutma ve verilerinizi OpenAI'ye maruz kalmaktan koruma yeteneği, belirli kullanım durumları için zorlayıcı olabilir.
SageMaker, modeli hızlı bir şekilde test etmek için büyük kolaylık sağlar ve hazır olduğunuzda üretime geçme esnekliği sağlar. İster MPT-7B'ye yeni başlıyor olun ister bir süredir kullanıyor olun, bu kılavuzun değerli bilgiler sağladığını umuyoruz.
MPT-7B, MPT-30B, Falcon-40b ve ChatGPT arasındaki performans karşılaştırmalarını daha derinlemesine inceleyeceğimiz bir sonraki blog gönderimiz için bizi takip etmeye devam edin.
MPT-7B veya onun daha büyük çeşidi MPT-30B hakkında daha fazla bilgi edinmek istiyorsanız aşağıdaki bağlantılara bakın.
Unutmayın, ister ChatGPT ister MPT-7B ile çalışıyor olun, önemli olan, kullanım senaryonuzun veri gizliliğinden ve maliyet etkinliğinden ödün vermeden sunulmasını sağlamaktır. Mutlu tamircilik!
MindfulDataAI.com'da işletmeler için ChatGPT'yi sunuyoruz. Şirketinizin verileriyle ChatGPT, MPT veya diğer modellerden yararlanmak istiyorsanız lütfen bizimle iletişime geçin.