Magic: The Gathering draft’ıyla Mistral 7B fine-tuning deneyi
(generallyintelligent.substack.com)- Magic: The Gathering’de draft kart seçimini görev olarak alıp, LLM eğitim korpusunda bulunmayabilecek güncel kart ortamında fine-tuning’in muhakeme performansını ne kadar artırdığını test ediyor
- 17lands’in draft kayıtlarını prompt’a dönüştürüp, kazanma oranı yüksek oyuncuların seçimlerini doğru sinyali olarak kullanarak modelin mevcut pakete ve önceki kart havuzuna bakıp kart seçmesini sağlıyor
- Fine-tuning uygulanmış 7B parametreli model, bu görevde GPT-4’ü açık biçimde geride bıraktı ve insan ya da deney yapan kişi seviyesine yakın performans gösterdi; fine-tuned GPT-3.5 daha iyi olabilir ama maliyet yükü çok daha yüksek
- Veri formatı ve prompt biçimini, uzun eğitim döngüleri nedeniyle hızlıca doğrulamak zordu; yaklaşık 40 saatlik deneyden sonra bile en iyi prompt biçimi konusunda kesin bir sonuca varılamadı
- Pratikte önce bir değerlendirme seti oluşturmak, eğitim script’ini sıfırdan yazmak yerine axolotl gibi araçlar kullanmak daha iyi; küçük OSS LLM’ler bile GPU belleği ve depolama açısından hafife alınacak gibi değil
Deney görevi: Magic draft
- Deney, LLM’in dağılım dışı veride ne ölçüde muhakeme yapabildiğini görmek için Magic: The Gathering draft’ını kullanıyor
- Magic: The Gathering, yaratık ve büyü kartlarıyla rakibe karşı oynanan stratejik bir koleksiyon kart oyunudur; draft ise rastgele kart paketlerinden sırayla kart seçip deste oluşturma yöntemidir
- Draft, iki açıdan deney için uygundu
- Muhakeme: İyi bir seçim için o ana kadar seçilen kartlarla mevcut paketteki kartları birlikte anlamak gerekiyor
- Dağılım dışı veri: Yeni Magic kartları yılda 4 ila 6 kez çıkıyor ve en yeni kartlar LLM eğitim korpusunda yer almıyor olabilir
- Veri olarak 17lands draft izleme kayıtları kullanıldı
- 17lands, dijital Magic istemcisindeki draft verilerini izleyen bir hizmettir
- Kazanma oranına göre üst düzey oyuncuların seçimlerinden “doğruya” yakın bir sinyal üretilebiliyor
- Magic oyuncuları arasında bile doğru seçim konusunda çok tartışma olduğundan bu sinyal tamamen net değil, ama yeni bir görevin öğrenilip öğrenilmediğini test etmek için yeterli
Veri kümesi yapısı ve prompt formatı
- 17lands draft verisi kabaca şu bilgileri içeren büyük bir CSV dosyasıdır
- Mevcut pakette seçilebilecek kartlar
- Draft yapan kişinin o ana kadar seçtiği kartlar
- O paketten gerçekte seçilen kart
- Bunu dil modeli fine-tuning’ine uygun hale getirmek için veri metinsel diyalog formatına dönüştürüldü
- system mesajı modeli “DraftGPT” olarak tanımlıyor ve draft pick istendiğinde önce kart adını yanıtlamasını söylüyor
- user mesajı mevcut paket numarası ve pick numarası, o ana kadarki kart havuzu, son 5 pakette görülen renklere göre kart sayısı ve mevcut paketteki kart açıklamalarını içeriyor
- assistant mesajı yalnızca seçilen kart adını veriyor
- Veri dönüşümü örnekleri 17lands verisini LLM prompt’una dönüştüren örnek ve ChatML biçimindeki tam draft prompt’u olarak sunuluyor
- En zor kısım, istenen sonucu üretecek şekilde veriyi formatlamaktı
- Fine-tuning’de prompt değişikliklerini denemek için genelde saatler süren eğitim işleri çalıştırmak gerekiyor
- Bu yüzden deney döngüsü, tipik prompt engineering’e kıyasla 100 kat daha yavaş hissettirdi
- Yaklaşık 5 farklı prompt biçimi, kart başına ayrıntı miktarı, son birkaç pick’in bağlam olarak eklenmesi ve yeni kart bilgisini ezberletmeye yönelik “kart bilgisi” eğitim satırlarının eklenmesi gibi seçenekler denendi
- Yaklaşık 40 saatlik deneyin ardından bile bu görev için en iyi prompt biçiminin ne olduğu kesinleşmedi
Fine-tuning çalışma ortamı
- GPU, Runpod üzerinden saatlik kiralandı
- Kullanılan GPU, RTX 4090, 24GB VRAM modeliydi
- Maliyet yaklaşık $0.7/saat idi
- Başta HuggingFace transformers ve PEFT ile eğitim script’ini doğrudan yazmak istendi; sınırlı GPU koşulları nedeniyle QLoRA seçildi
- Script’i doğrudan yazma yaklaşımı bol deneme-yanılma gerektirdi
- FlashAttention gibi bilince kolay olan optimizasyonlardan, LoRA parametreleri gibi makale okumadan anlaşılması zor seçeneklere kadar pek çok nokta vardı
- Bunların hepsi tek tek çözülebilir ama doğrudan kendin çözmeye çalışmak çok zaman alıyor
- Sonunda axolotl kullanıldı
- Pek çok optimizasyonu varsayılan olarak içerdiği için çalıştırmak daha kolaydı
- Dokümantasyonu da iyiydi ve LLM fine-tuning’e başlayan çoğu kişi için uygun bir başlangıç noktası olarak değerlendirildi
Model boyutu ve maliyet
- “Küçük” OSS LLM’ler bile geçmiş ölçütlere göre çok büyük
- 2019 civarında sık eğitilen BERT yaklaşık 110 milyon parametreydi
- 7B model bunun yaklaşık 70 katı büyüklüğünde
- 7B model pratik işletim açısından da yük getiriyor
- Ağırlıklar yaklaşık 16GB olduğundan depolama alanı sorun olabiliyor
- QLoRA gibi yöntemler kullanılsa bile GPU belleği hâlâ zorlayıcı
- GPT-3.5 fine-tuning daha iyi sonuç verebilir gibi görünse de maliyeti yüksekti
- Mistral’ı bare metal üzerinde fine-tuning yapmaktan yaklaşık 100 kat daha pahalı
- Çıkarım tarafında da premium fiyatlandırma var
- Mistral-7B’nin en büyük eğitim çalışmasına benzer bir GPT-3.5 fine-tuning işinin yaklaşık $500 tutacağı hesaplandı
Değerlendirme yöntemi ve sonuçlar
- Deneyden önce iyi bir değerlendirme seti hazırlamak önemli
- Bu görevde eğitim verisinden bazı tam draft’lar holdout olarak ayrıldı ve modelin insanlarla aynı kartları seçip seçmediğine bakıldı
- Değerlendirme seti olduğu için fine-tuning sonuçlarını yorumlamak daha kolay oldu
- Kart seçim doğruluğunu tanımlamak görece kolaydı, ama şu ölçütler daha belirsizdi
- Model farklı bir seçim yaptığında bu seçimin gerekçelendirilebilir olması gerekiyor
- Modelin neden o kartı seçtiğini makul biçimde açıklayabilmesi tercih edilir
- Bu belirsiz ölçütler, çeşitli örnekleri tek tek inceleyen gözle değerlendirme ile kontrol edildi ve süreç yavaştı
- GPT-4, fine-tuning uygulanmış küçük modele kıyasla daha az tuhaf seçim yapıyor ve seçimlerini gerekçelendirmede daha iyi
- Fine-tuning uygulanmış 7B model, bu kart seçme görevinde doğruluk ve maliyet açısından GPT-4 ile in-context learning’i rahatça geçti
- Bir deneyde model bir kart seti üzerinde fine-tuning edildikten sonra görmediği başka bir kart setinde değerlendirildi
- Modelin yalnızca iyi kartları ezberlemediği, draft kavramını bir ölçüde genelleştirdiği görüldü
Magic Copilot ve draft botları
- Fine-tuning uygulanmış draft pick modeli, Magic Arena log’larına bağlandı ve hızlı bir Electron uygulamasıyla “Magic Copilot” yapılarak birkaç draft’ta kullanıldı
- Kart seçimlerini fine-tuned model üretiyor, açıklamaları ise GPT-4 sağlıyordu
- Çoğunlukla iyi çalıştı ama bazen GPT-4, fine-tuned modelin seçimine katılmayıp anında itiraz ediyordu
- 8 draft AI birbirine bağlanarak botların kendi aralarında simülasyon draft’ı yapması da denendi
- Botlar yalnızca kendi aralarında kart paslaştığında tek renkli destelere güçlü bir eğilim gösterdi
- İnsanlar farklı seçimler kattığında çok daha normal destelere yakınsama eğilimi görüldü
- Genel olarak bu draft AI, şu anda var olanlar arasında daha güçlü ve daha insansı bir draft AI’ya yakın görünüyordu
- Magic Arena’nın quick draft botlarıyla karşılaştırıldığında, heuristik botlardan ziyade yüksek kaliteli insan draftçılara daha yakın seçimler yapıyordu
1 yorum
Hacker News görüşleri
Bu yazının, kavramsal olarak basit görünen fikirleri bile LLM fine-tuning ile hayata geçirmenin ne kadar zor olduğunu iyi göstermesi hoşuma gitti
Oldukça iyi bir başlangıç veri seti ve temel model olsa bile kolay bir iş olmamış gibi görünüyor. Bu tür modeller, doğal ve kesin bir doğru cevabı olmayan işler için uygun görünüyor. Örneğin verilen seçim listesinde kusursuz kartı bulmak kombinatoryal olarak zor olabilir, ama iyi bir kartı seçmek mümkün ve LLM'ler de insan seviyesine yakın performansa ulaşabilir. Şu anda LLM'leri fine-tuning ile çözebildiğimiz problem sınıfı burada ortaya çıkıyor gibi
Mesela bu ay arkadaşlarım ve çocuklar için hediye bulmama yardım alıyorum. Sorunu çözmek için en iyi seçeneğe ihtiyacım yok; iyi bir seçenek yeterli
Bu günlük hayatta en devrimsel değişim olmayabilir ama Magic: The Gathering gibi oyunlarda ilginç oyun tarzlarına sahip bot rakiplere karşı oynamayı gerçekten dört gözle bekliyorum
Araştırma-geliştirme ekibinin, farklı oyun seviyelerinde yeni mekanikler üretme ve test etme becerisini ciddi biçimde geliştirebileceği net bir kullanım alanı gibi görünüyor
“Bu verilerle hizmet içindeki en iyi oyuncuların yaptığı draft pick'lere bakıp doğru cevabı çıkarıyor” kısmında, https://www.17lands.com/leaderboard üzerindeki draft pick'lere bakıp galibiyet oranına göre sıralama yapıldığı mı kastediliyor?
Normalde Match Wins ya da Trophies seçilmesi gerekmez miydi diye düşünüyorum. Aksi halde hizmet içindeki en iyi oyuncuları ölçmüyor, seçimlerinin çoğu çok iyi olan draft'ları, yani şanslı oyuncuları öğrenmiş oluyorsunuz. Bunun etkisi doğrulama ve testte de aynı şekilde görünür.
LLM baseline'ı yerine, 17lands verisinden kart bazında diğer kartlara karşı “Elo” benzeri bir puan hesaplayan bir baseline ile karşılaştırmak gerekmez mi? İki renk belirlenmeden önce puanı en yüksek kartı önersin, renkler belirlendikten sonra da o renklerde ya da araziler arasında puanı en yüksek kartı seçsin.
LLM'nin kural bilgisini bir ölçüde edinmesi mümkün olabilir, ama daha önce görmediği kartlarda kart nadirliği, maliyet ve “büyüklük” gibi sinyalleri daha fazla yakalıyor gibi görünüyor. Draft “doğruluğu” da düşük görünüyor ve bunun kastedilen anlam olup olmadığından emin değilim. Yüksek galibiyet oranlı seçimlerde olduğu gibi hepsinin genel olarak iyi seçimler olduğu bir durumda, sadece ham verideki oyuncudan farklı bir seçim yapmış olması kastediliyorsa, aslında iyi seçimler arasından seçmek daha zor görünüyor
Eşik Diamond ve üzeri. Ancak bu oyuncuların kötü sonuçlanan draft'ları da dahil hepsine bakılıyor.
Burada doğruluk, verilen pakette iyi oyunculardan biriyle aynı seçimi yapıp yapmadığı anlamına geliyor. Elbette öznel, yani kusursuz bir metrik değil, ama üst seviye drafters'ı taklit etme becerisini görmek için fena değil
Prompt kaybını 0 yapmak yerine Axolotl'da ağırlıklı kayıp kullanmayı da denediniz mi diye merak ediyorum
Bir ara Microsoft'un GPT-3 belgelerinde, yanıtın kısa olduğu durumlarda, buradaki “Cut in.” örneğinde olduğu gibi, bu yaklaşımın avantajlı olduğundan bahsediliyordu sanırım. Fine-tuning öncesinde subreddit ya da forumlarla domain adaptation yapmak da yardımcı olabilir
Domain adaptation'ı da düşünüyordum; ayrıca draft YouTube videolarını yazıya dökmeyi de değerlendiriyorum. Ne kadar yardımcı olacağını gerçekten merak ediyorum
Yazarı doğru anladıysam, her seçim anında ajana verilen prompt'ta şu ana kadarki kart havuzundan yalnızca kart adları yer alıyor, teslim alınan paketteki kartlar içinse tam metin bulunuyor gibi görünüyor
Muhtemelen bağlam penceresi boyutu nedeniyle seçimler arasında bağlam korunamıyor.
Eğer durum buysa ve bu setlerin botun eğitim cutoff tarihinden sonraya ait olduğu varsayımı doğruysa, iyi bir drafter olması tamamen şans değil mi? Botun önceki pick'lerle hangi kartların iyi gittiğini, şimdiye kadar hangi sinyalleri gönderip aldığını vb. bilmesinin kelimenin tam anlamıyla bir yolu yok. En iyi insan oyuncu bile, örnek prompt'taki “Gadwick's First Duel -- {1}{U} (uncommon)” ifadesini gördüğünde, kartı daha önce hiç görmediyse onun neyle iyi çalıştığını bilemez.
Sonuçta önceki pick'lerle renk çakışan genel olarak iyi draft kartlarını seçecek; bu da mevcut pick-order tabanlı sezgisellerin zaten hep yaptığı şey
Model, kartın tam metnini, türünü ve CMC gibi bilgileri tamamladığı kart quiz tamamlama verisiyle de eğitiliyor. Ayrıca paketteki kartlar için de next-token completion öğrenmesi gerektiğinden, draft pick üretirken kartların tam metnini tahmin etmeyi de öğreniyor. Bir araya gelince bot yeni kartların metnini oldukça kapsamlı biçimde öğreniyor
Görmediyseniz https://news.ycombinator.com/item?id=38525978 de bu kitle için ilginç olabilir
“I hacked Magic the Gathering: Arena for a 100% win rate” yazısı; sırf araştırmacının, MTGA'nın karar verici yapay zekası Sparky'nin dışarıdan şüphelenildiği kadar aptalca karmaşık görünmediğini keşfetmiş olması bile okumaya değer kılıyor
Daha çok oyuna yeni başlayan ve kuralları bilmeyen oyuncuların aptal bir bilgisayara karşı oynama deneyimi yaşaması ya da kurdukları destenin nasıl çekildiğini ve nasıl kombo yaptığını görmek için “goldfish'e karşı oynama”nın bilgisayar versiyonu gibi. Satrançtaki CPU gibi bir şey değil
Draft’ın LLM ile temsil edilebilmesi çok ilginç
Benim gördüğüm en iyi performanslı draft yapay zekaları bir şekilde temsil öğrenmesini kullanıyordu. Referans: https://arxiv.org/pdf/2107.04438.pdf
“Temsil öğrenmesi” derken başka bir şeyi kastettiysen ben yanlış anlamış olabilirim
Yine de LLM temsilinde ilginç taraflar var. Örneğin sistem prompt’u ile bota tercihler veya kişilik verebilmek oldukça eğlenceli
Her kartı bir token olarak ele alıp, draft durumunu girdi olarak vererek tahmin edilen token’ın seçilecek kart olmasını sağlasak daha küçük bir model kullanmak veya daha iyi sonuçlar almak mümkün olur mu diye merak ediyorum
Muhtemelen özel bir tokenizer ile sıfırdan eğitmek gerekirdi
<|post_author|>username<|post_title|>title here...şeklindeydiOrtaya çıkan model, her şeyi düz metin olarak biçimlendirdiğim duruma göre çok daha kötüydü. MPT-30B, 15 özel token, 300 milyon eğitim token’ı ve full fine-tuning koşulları vardı.
Ben hata yapmış olabilirim ama açık kaynak fine-tuning tarafında da çok sayıda token’ın başarıyla eklendiği pek bir örnek görmedim
“Daha önce hiç görülmemiş kartlar” için çalışmayacaktır ve hata yaptığında tamamen saçma seçimler yapabilir, ama doğruluğun %90’a kadar çıkabileceğini düşünüyorum
Mistral başlangıç noktası olmadan, draft için bir sinir ağı eğitmekle karşılaştırmak ilginç olurdu. Hem epoch hem de maliyet açısından görmek isterdim
LLM unsurunun neden ilgili olduğu net değil. İnternette yeterince deck listesi veya mock draft bulunması etkili olmuş olabilir ya da belki de “LLM fine-tuning” tarafındaki altyapı “sinir ağı kurma”ya göre daha iyi durumdadır. Bunu kolaylaştıracak nnfiddle gibi bir şeye ihtiyaç olabilir
Fine-tuning görece ucuz ve sadece veriyi içeri vererek bunun gibi işleri oldukça iyi yapar hale getirebilirsiniz. Temel checkpoint’i üretmek çok fazla hesaplama gerektirir ama “bilginin” büyük kısmı zaten onun içindedir.
Sıfırdan bir sinir ağı kuracaksanız önce kartları girdiye nasıl eşleyeceğinizi çözmeniz gerekir. MTG hakkında çok bilgim yok ama çoğu takas kartı oyununda metin açıklamaları ve karmaşık etkiler var. Metni mantığa eşlemek, LLM’lerin gerçekten iyi yaptığı bir iş; aksi halde sıfırdan başlarken makul davranışlar ortaya çıkana kadar yine epey hesaplama gerekir.
Çoğu yazılım geliştirici için de bu taraf daha kolay. Fine-tuning genelde metinleri toplayıp bir fine-tuning script’ine vermekten ibaret. Lineer cebirin ya da “convolution”ın ne olduğunu bilmeden de yapılabilir
“Mistral olmadan draft için sinir ağı eğitmek” derken giriş katmanının paketteki kartların bitmap vektörleri olduğu bir yapıyı kastettiğini varsayıyorum. Bu deneyin temel özelliği, modelin daha önce hiç görmediği ve eğitim verisinin sıfır olduğu setlerde bile yalnızca kart metniyle çalışabilmesi. LLM olmadan bunun zor olacağını düşünüyorum
Bu yazı çok iyiydi. Aslında bu hafta Magic: The Gathering için LLM fine-tuning konusuna bakıyordum
Kartların anlamsal embedding’leriyle işlev veya atmosfer olarak benzer kartları bulmaya yarayan küçük bir kart benzerlik tarayıcısı yapıyorum.
Şu anda sadece InstructorXL kullanıyorum ama Instructor’ın oyuna dair doğuştan bilgisi yetersiz olduğu için mi böyle, yoksa daha iyi prompt yazmam mı gerekiyor emin değilim. Şimdiye kadar 9 prompt denedim ama embedding üretim performansı pek iyi görünmedi: https://github.com/HanClinto/MtgMatrix/blob/main/data/create...
Sıradaki adımım benzer kart veri kümesini indirmekti; bununla büyük bir embedding modelinde triplet loss eğitimi gibi bir şey deneyebilir miyim diye bakacaktım. Bunu pratikte nasıl bağlayacağımı hâlâ çözemedim ama bu yazı gerçekten çok ilham verici