LLama2 modeliyle çalışmaya dair yolculuğumu ve içgörülerimi paylaşacağım blog gönderime hoş geldiniz. LLama2, Meta tarafından geliştirilen harika bir yapay zeka modelidir ve GPT-3'ü anımsatan yeteneklerini keşfetmek heyecan vericidir. Bu yazıda, kurulumu, önkoşulları, uygulamaları, önemi ve hatta onu kendimiz nasıl eğitebileceğimize bir bakış dahil olmak üzere LLama2'nin farklı yönlerini inceleyeceğiz. HackBot projem üzerinde çalışırken kazandığım LLama2 ile öğrenme deneyimimi size anlatacağım için heyecanlıyım.
LLama2, Meta tarafından oluşturulan ve özünde yapay zeka modeli olarak sınıflandırılan son teknoloji bir teknolojidir. Bunu, insan dilini anlayabilen ve neredeyse insan gibi anlamlı yanıtlar üretebilen çok akıllı bir asistan olarak düşünün. LLama2'nin amacı insanlar ve bilgisayarlar arasındaki etkileşimin kolaylığını ve doğallığını arttırmaktır.
Arkadaşlarınızla konuşurken veya e-posta yazarken kendinizi sözlü olarak nasıl ifade ettiğinizi düşünün; iletişim kurduğunuz insanlar anlar ve tepki verir. Operasyonda benzer şekilde, LLama2 muazzam miktarda metin verisini işleyebilir ve ondan öğrenebilir. Bu, LLama2'nin bilgi sağlama ve soruları yanıtlamanın yanı sıra içerik yazma ve problem çözmeye yardımcı olma gibi çeşitli görevlerde yardımcı olmasını mümkün kılar.
LLama2'nin benzersiz özelliği erişilebilirlik göz önünde bulundurularak oluşturulmuş olmasıdır. Bu, farklı düzeyde teknik beceriye sahip herkesin kullanabileceği esnek bir enstrümana sahip olmak gibidir. LLama2, ister geliştirici, yazar, öğrenci, ister sadece yapay zekayla ilgilenen biri olun, yapay zekanın potansiyeline erişmeniz için basit bir yaklaşım sunar.
Aslında LLama2, bilgisayarların insan diliyle daha kolay ve etkili bir şekilde etkileşime girebileceği bir olasılıklar alanı yaratıyor. Metin ve dil içeren etkinliklerde size yardımcı olmak için sürekli yanınızda olan sanal bir arkadaşınıza sahip olmak gibi olduğundan, teknolojiyle etkileşimleriniz çok daha üretken ve verimli hale gelir.
Sizi harekete geçirecek ilk adımlarla başlayalım. Kodun çalışmasını sağlamak için dikkate almanız gereken görevler aşağıdadır.
Dilinizi Seçmek:
Güvenilir bir seyahat arkadaşı olarak Python ilk tercihimdi. Uyarlanabilirliği ve programlama topluluğundaki yaygın kullanımı nedeniyle LLama2 ile etkileşim kurmak için mükemmel bir seçenektir. Python'a zaten aşina iseniz iyi durumdasınız demektir.
Temelleri Ayarlama:
HuggingFace Hesabı ve Lama Depo Erişimi:
Başlamak için çeşitli AI modellerini ve araçlarını barındıran bir platform olan HuggingFace'te bir hesap oluşturmanız gerekecek. Hesabınızın hazırlandığından emin olun. Ek olarak, Meta'nın Lama deposuna erişim sağlayarak LLama2 bileşenlerini bulabilirsiniz.
C/C++ ve Cmake Kurulumu: LLama2, sisteminizde C/C++ ve Cmake'nin kurulu olmasını gerektiren LLama-cpp adında bir bileşene sahiptir. Bu araçlar LLama-cpp oluşturmak için gereklidir, bu nedenle kurulduklarından ve kullanıma hazır olduklarından emin olun.
Oturum Açma ve Hazırlanma:
Huggingface-cli Girişi: HuggingFace hesap ayrıntılarınız elinizdeyken, oturum açmak için HuggingFace komut satırı arayüzünü kullanın. Bu adım, hesap belirtecinizi kullanarak sizi HuggingFace platformuna bağlayarak ihtiyacınız olan yapay zeka kaynaklarına erişmenizi sağlar. Bir jeton oluşturamazsanız jetonu bu URL kullanılarak bulabilirsiniz.
Komutlar şunlardır:
$ huggingface-cli login Token: Your_Token
LLama-cpp'yi yükleme: Llama-cpp, lama ve Python'un birlikte çalışması için düşük seviyeli bir erişim bağlayıcıdır ve bize daha fazla esneklik sağlar.
Kurulum 2 şekilde yapılabilir:
Doğrudan Python kurulumu:
pip install llama-cpp-python
Derleme seçeneği: Bunun için, karmaşıklığını açıklayan modülün benioku dosyasına göz atmanız gerekir: README.md
Langchain Kurulumu : Langchain, LLM modeli uygulama geliştirmeyi kolaylaştırmayı amaçlayan açık bir çerçevedir. Bu görev için özellikle LLamaCpp , PrompTemplate , CallbackManager ve StreamingStdOutCallbackHandler modüllerini kullanacağız.
Kurulum için komut şudur:
pip install langchain pip install langchainplus-sdk
Python kodunda nasıl kullanılır?
Şimdi asıl soru nasıl kullanıldığıdır?
Buna cevap vermek için entegrasyon kısmı adımlara ayrılabilir.
Modelin indirilmesi ve tanımı:
Bunun için HackBot'un kodundan bahsedeceğim.
Tüm gerekli modülleri çağırdıktan sonra model adına ve onu indirmek istediğimiz repoya karar vermeliyiz.
model_name_or_path = "localmodels/Llama-2-7B-Chat-ggml" model_basename = "llama-2-7b-chat.ggmlv3.q4_0.bin" model_path = hf_hub_download(repo_id=model_name_or_path, filename=model_basename)
Yukarıdaki kodda kullanılan lama modülü 7b veya 7 milyar parametreli bir model ve Localmodels sürüm lama2'dir.
Daha sonra model_path , llama-2-7b-chat.ggmlv3.q4_0.bin dosyasını depodan sisteme indiren huggingface indiricisi tarafından modelin indirme yolu tarafından yönlendirilir.
LlamaCpp onu kullanacak model konumuna başvuracağından yol önemlidir.
Bir kişiyi ve bilgi istemi şablonunu tanımlayın:
from langchain import PromptTemplate from langchain.callbacks.manager import CallbackManager from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler template = """ persona: {persona} You are a helpful, respectful, and honest cybersecurity analyst. Being a security analyst, you must scrutinize the details provided to ensure they are usable for penetration testing. Please ensure that your responses are socially unbiased and positive. If a question does not make any sense or is not factually coherent. If you don't know the answer to a question, please don't share false information. Keep your answers in English and do not divert from the question. If the answer to the asked question or query is complete, end your answer. Keep the answer accurate and do not skip details related to the query. Give your output in markdown format. """ prompt = PromptTemplate(template=template, input_variables=["persona"]) callback_manager = CallbackManager([StreamingStdOutCallbackHandler()])
Bir lamaya, onu kişisel asistan veya siber güvenlik analisti olarak tanımlamak gibi, kişiliği olarak kullanabileceği bir temel şablon vermeliyiz.
Şablon, modelin nasıl çalışacağını tanımlar ve nihai çıktının ne olacağı üzerinde çok fazla etkiye sahip olabilir, bu nedenle çok dikkatli yazılmalıdır.
Daha sonra istem, şablon kişiliği kullanılarak ve PromptTemplate modülü de kişiliği kullanarak oluşturulur.
Geri arama yöneticisi, yapay zekanın çıktısını görüntülemek ve ayrıca Giriş ve çıkış bağlantılarını yönetmek için kullanılır.
LlamaCpp modülünü tanımlayın:
llm = LlamaCpp( model_path=model_path, input={"temperature": 0.75, "max_length": 3500, "top_p": 1}, callback_manager=callback_manager, max_tokens=3500, n_batch=3500, n_gpu_layers=60, verbose=False, n_ctx=3500, streaming=False, )
Şimdi bunu uygulayarak bir chatbot omurgası veya bağlayıcı oluşturduk ve bunu kullanarak AI modeliyle aktif bir görüşme başlatabiliriz.
HackBot, siber güvenliğe özel bir sohbet botu oluşturma girişimimdi ve bu araç, tarama verileri, günlük verileri analiz araçları ve kod analizi yetenekleri gibi özelliklere sahiptir.
Sohbet Etkileşim Döngüsü:
while True: try: prompt_in = Prompt.ask('> ') # ... except KeyboardInterrupt: pass
Bu döngü, kullanıcının komutları veya istemleri girebileceği etkileşimli bir ortam oluşturur. Kod, Prompt.ask('> ')
kullanarak kullanıcı girişini bekler ve programı kilitlemeden KeyboardInterrupt (Ctrl+C) gibi istisnaları işler. Bu döngü, chatbotun duyarlı kalmasını ve kullanıcıyla sürekli etkileşime girebilmesini sağlar.
Kullanıcı Komutlarının İşlenmesi:
if prompt_in == 'quit_bot': quit() elif prompt_in == 'clear_screen': clearscr() pass elif prompt_in == 'bot_banner': # ... elif prompt_in == 'save_chat': # ... elif prompt_in == 'static_code_analysis': # ... elif prompt_in == 'vuln_analysis': # ... elif prompt_in == 'contact_dev': # ... elif prompt_in == 'help_menu': # ... else: # ...
Döngü içerisinde kullanıcı girişi farklı komut anahtar sözcüklerine göre kontrol edilir. Girişe bağlı olarak kod karşılık gelen eylemleri yürütür. Örneğin, kullanıcı 'quit_bot' girerse programdan çıkmak için quit()
işlevi çağrılır. Kullanıcı 'clear_screen' girerse clearscr()
işlevi konsol ekranını temizler. Benzer mantık diğer komutlara da uygulanır.
Yapay Zeka Yanıtları Oluşturma:
else: prompt = prompt_in print(Print_AI_out(prompt)) pass
Kullanıcı girişi önceden tanımlanmış komutların hiçbiriyle eşleşmiyorsa, yapay zekaya yönelik bir bilgi istemi olarak değerlendirilir. Giriş, prompt
değişkenine atanır ve sağlanan istemi temel alarak bir AI yanıtı oluşturmak için Print_AI_out(prompt)
işlevi çağrılır. Yapay zeka tarafından oluşturulan yanıt daha sonra konsola yazdırılır.
Sohbet Geçmişini Kaydetme:
def save_chat(chat_history: list[Any, Any]) -> None: f = open('chat_history.json', 'w+') f.write(json.dumps(chat_history)) f.close
save_chat
işlevi, hem kullanıcı istemlerini hem de yapay zeka tarafından oluşturulan yanıtları içeren konuşma geçmişini 'chat_history.json' adlı bir JSON dosyasına kaydetmekten sorumludur. Bu fonksiyon chat_history
listesindeki verileri JSON formatına serileştirir ve dosyaya yazar.
Güvenlik Açığı Analizi ve Statik Kod Analizi:
elif prompt_in == 'static_code_analysis': print(Markdown('----------')) language_used = Prompt.ask('Language Used> ') file_path = Prompt.ask('File Path> ') print(Markdown('----------')) print(static_analysis(language_used, file_path)) pass elif prompt_in == 'vuln_analysis': print(Markdown('----------')) scan_type = Prompt.ask('Scan Type > ') file_path = Prompt.ask('File Path > ') print(Markdown('----------')) print(vuln_analysis(scan_type, file_path)) pass
Bu bölümler, statik kod analizi ve güvenlik açığı analizi gerçekleştirmek için kullanıcı komutlarını yönetir. Kullanıcıdan, kullanılan dil veya tarama türü ve dosya yolu gibi bilgileri sağlaması istenir. Daha sonra ilgili analiz işlevi ( static_analysis
veya vuln_analysis
) sağlanan verilerle çağrılır ve yapay zeka, analiz sonuçlarını içeren yanıtlar oluşturur.
Güvenlik Açığı Analizi: vuln_analysis
bölümünde aşağıdaki kod kullanıcıdan giriş yapmasını ister:
scan_type = Prompt.ask('Scan Type > ') file_path = Prompt.ask('File Path > ')
Burada Prompt.ask
fonksiyonu kullanıcıdan etkileşimli olarak bilgi istemek için kullanılır. Kullanıcıdan, analiz edilmesi gereken veriler için tarama türünü ve dosya yolunu girmesi istenir. Bu girdiler güvenlik açığı analizi için gereklidir. Kullanıcı bu girdileri sağladıktan sonra analiz, kullanıcının girdisini içeren bir istem kullanılarak başlatılır:
prompt = f""" **Objective:** You are a Universal Vulnerability Analyzer powered by the Llama2 model. Your main objective is to analyze any provided scan data or log data to identify potential vulnerabilities in the target system or network. You can use the scan type or the scanner type to prepare a better report. **Instructions:** # ... (rest of the instructions) **Input Data:** You will receive the scan file data or log file data in the required format as input. Ensure the data is correctly parsed and interpreted for analysis. **Output Format:** The vulnerability analysis report should be organized as mentioned in the "Comprehensive Report" section. Please perform the vulnerability analysis efficiently, considering the security implications and accuracy, and generate a detailed report that helps users understand the potential risks and take appropriate actions. --- Provide the scan type: {scan_type} Provide the scan data or log data that needs to be analyzed: {file_data} """
Bu istemde, {scan_type}
ve {file_data}
yer tutucuları, kullanıcı tarafından girilen gerçek değerlerle değiştirilir. Bu dinamik bilgi daha sonra, sağlanan tarama türüne ve dosya verilerine dayalı olarak analiz sonuçları sağlayan bir yapay zeka yanıtı oluşturmak için LLama2 modeline aktarılır.
Statik Kod Analizi: Benzer şekilde, static_code_analysis
bölümünde kod, kullanıcıdan giriş yapmasını ister:
language_used = Prompt.ask('Language Used> ') file_path = Prompt.ask('File Path> ')
Kullanıcıdan, kullanılan programlama dilini ve analiz edilmesi gereken kodun dosya yolunu sağlaması istenir. Bu girdiler statik kod analizi gerçekleştirmek için çok önemlidir. Tıpkı güvenlik açığı analizi bölümünde olduğu gibi, LLama2 modeli için de kullanıcının girişini içeren bir bilgi istemi oluşturulur:
prompt = f""" **Objective:** Analyze the given programming file details to identify and report bugs, vulnerabilities, and syntax errors. Additionally, search for potential exposure of sensitive information such as API keys, passwords, and usernames. **File Details:** - Programming Language: {language_used} - File Name: {file_path} - File Data: {file_data} """
Burada, {language_used}
ve {file_path}
yer tutucuları, kullanıcı tarafından sağlanan gerçek değerlerle değiştirilir. Bu dinamik bilgi istemi daha sonra, kullanıcı tarafından girilen programlama diline ve dosya verisine dayalı olarak analiz sonuçlarını sunan bir yapay zeka yanıtı oluşturmak için kullanılır.
Her iki durumda da dinamik istemlerin kullanılması, LLama2 tarafından oluşturulan yanıtların bağlamsal olarak alakalı olmasını ve kullanıcı tarafından talep edilen spesifik analize göre uyarlanmasını sağlar.
İletişim Bilgileri ve Yardım Menüsü:
elif prompt_in == 'contact_dev': console.print(Panel( Align.center( Group(Align.center(Markdown(contact_dev))), vertical="middle", ), title= "Dev Contact", border_style="red" ), style="bold green" ) pass elif prompt_in == 'help_menu': console.print(Panel( Align.center( Group(Align.center(Markdown(help_menu))), vertical="middle", ), title= "Help Menu", border_style="red" ), style="bold green" ) pass
Bu bölümler, geliştiricinin iletişim bilgilerini ( contact_dev
) görüntülemeye yönelik komutları ve mevcut komutları listeleyen yardım menüsünü ( help_menu
) yönetir. Kullanıcılar bu komutları girdiğinde ilgili bilgiler, Zengin kitaplık kullanılarak güzel biçimlendirilmiş bir panelde görüntülenir.
Ana Fonksiyonun Yürütülmesi:
if __name__ == "__main__": main()
Tüm sohbet etkileşimini ve işleme mantığını kapsayan main
işlev, yalnızca komut dosyası doğrudan çalıştırıldığında (bir modül olarak içe aktarılmadığında) yürütülür. Bu satır, komut dosyası çalıştırıldığında chatbot'un temel işlevlerinin yürütülmesini sağlar.
Chatbot'un tamamını Github depomdan görüntüleyebilir ve deneyebilirsiniz: Bağlantı
Bir yapay zeka modelinin eğitimi, planlama ve doğruluk gerektiren dönüşümsel bir süreçtir. İşte işlemi tamamlamak için adım adım bir kılavuz.
Önkoşullar :
Tensör Gücü: Oldukça büyük bir tensör işleme kapasitesine sahip güçlü bir sistem, başarıya zemin hazırlayacaktır. Ekipmanınızın yapay zeka modeli eğitimi için gereken işlem gücünü karşılayabileceğinden emin olun.
Veri kümesi: Yapay zeka eğitim formatına karşılık gelen bir veri kümesi, modelinizin öğrenme eğrisini hızlandıracaktır. Etkili eğitim, modelin doğruluğunu ve yeterliliğini etkileyen yüksek kaliteli verilere bağlıdır.
Autotrain Advanced : Yapay zeka için bu temel eğitim kaynağına kendinize erişim hakkı verin. Eğitim prosedürü, önemli prosedürleri otomatikleştiren ve üretkenliği artıran bu program tarafından kolaylaştırılmıştır.
Eğitim süreci:
Veri Hazırlama: Doğruluk ve tekdüzelik sağlamak için veri kümenizi düzenleyin ve önceden işleyin. Temiz ve düzenli verilere sahip olmak, en iyi eğitim sonuçlarını almanın anahtarıdır.
Model Başlatma: Başlangıç noktanız olarak kullanmak için önceden eğitilmiş en iyi modeli seçin. Yakınsama hızlandırılır ve eğitim süreci hızlı bir şekilde başlatılır.
İnce Ayar: Parametrelere ince ayar yapmak için öğrenme hızı, toplu iş boyutu ve optimize edici ayarları gibi hiper parametreleri ayarlayın. Model performansını ve yakınsama hızını dengelemek için bu parametreleri ayarlayın.
Eğitim Yinelemeleri: Eğitimi başlatmak için veri kümesini modelde birkaç kez (dönemler) çalıştırın. Model, her yinelemede kavrayışını geliştirerek tahmin etme eğilimini artırır.
Doğrulama ve Test Etme: Modelinizin gelişimini sürekli olarak doğrulamak için ayrı bir doğrulama veri kümesinden yararlanın. Modelin genelleme kapasitesi yeni verilerle test edilerek değerlendirilir.
Analiz Etme ve İzleme: Eğitim ölçümlerine çok dikkat edin. Kayıp eğrileri, doğruluk eğilimleri ve diğer ölçümler gibi göstergeler, modelin gelişimi hakkında bilgi sunar.
Optimizasyon ve ince ayar: Hiperparametreleri izleme bulgularına göre stratejik olarak ayarlayın. İstenilen performansı elde etmek için modeli tekrar tekrar iyileştirin.
Değerlendirme ve dağıtım: Nihai modelin kapsamlı bir test veri kümesi değerlendirmesini gerçekleştirin. Sonuçlardan memnunsanız eğitilen modeli pratik uygulamalarda kullanın.
Veri Kümesi:
Veri kümesi, mevcut metin oluşturmaya özgü veri kümeleri altında huggingface veri kümelerinde bulunanlar gibi önceden oluşturulmuş bir veri kümesi olabilir. Özel veri kümeleri için şu adımları uyguladığınızdan emin olun:
Kullanabileceğiniz örnek bir veri kümesi formatı aşağıda verilmiştir: data.csv
İsim | Tanım | Çabuk |
---|---|---|
Selamlama | Temel selamlamalar ve yanıtlar | ###İNSAN: Merhaba |
Hava durumu | Hava durumunu sorma | ###İNSAN: Bugün hava nasıl |
Restoran | Bir restoran önerisi hakkında bilgi alma | ###İNSAN: İyi bir restoran önerebilir misiniz? |
Teknoloji | En son teknoloji trendlerini tartışmak | ###İNSAN: Bu yılın teknoloji trendleri neler? |
Seyahat | Seyahat tavsiyesi ve ipuçları arıyorum | ###İNSAN: Paris'i ziyaret etmek için herhangi bir seyahat ipucu |
Bu sadece 1 tür.
Veri kümenizi aldıktan sonra, ne kadar GPU gücüne sahip olduğunuza ve veri kümenizin ne kadar büyük olduğuna bağlı olarak yapay zekanızı eğitme zamanı da gelir ve zaman da buna göre karşılık gelir. Artık yapay zekayı eğitmek için Huggingface'ten gelişmiş otomatik eğitim modüllerini kullanabiliriz.
Bu komutu kullanarak autotrain-advanced'ı kurabiliriz:
pip install autotrain-advanced
Ve yapay zekayı eğitmek için bu komut:
autotrain llm --train --project_name your_project_name --model TinyPixel/Llama-2-7B-bf16-sharded --data_path your_data_set --use_peft --use_int4 --learning_rate 2e-4 --train_batch_size 2 --num_train_epochs 3 --trainer sft --model_max_length 2048 --push_to_hub --repo_id your_repo_id -
Project_name'i your_project_name
gerçek proje adınıza, modeli TinyPixel/Llama-2-7B-bf16-sharded
eğitmek istediğiniz lama modeline ve data_path'ı .
özel bir veri kümesi veya huggingface/dataset
kümesiyse, huggingface'ten geliyorsa veri kümesinin repo kimliği.
Bilgisayar korsanları olarak görevlerimizin çoğunu otomatikleştirmek için tam bir siber güvenlik asistanı olmak üzere bir Llama modeli veya elime geçen herhangi bir LLM modelini eğitmeyi hedefliyorum.
Yeteneklerden bahsederken Meta, Lama için çeşitli kriterleri içeren araştırma makaleleri yayınladı. Makalelere göre Llama modelleri 7B ila 65B parametreleri arasında değişiyor ve diğer büyük dil modelleriyle karşılaştırıldığında rekabetçi bir performansa sahip. Örneğin Llama-13B, 10 kat daha küçük olmasına rağmen çoğu kıyaslamada GPT-3'ten daha iyi performans gösteriyor. Lama'nın 65B parametreli modeli aynı zamanda Chinchilla veya PaLM-540B gibi diğer büyük dil modelleriyle de rekabet halindedir. Makalelerde ayrıca daha uzun süre eğitilen daha küçük bir modelin sonuç olarak daha ucuz olabileceği belirtiliyor. 7B modelinin performansının 1T tokenlerinden sonra bile iyileşmeye devam ettiğini belirtiyor. Ancak belge, Lama modelleri arasındaki performans farklılıklarına ilişkin belirli sayısal değerler sağlamamaktadır.
Diğer kaynaklar, Llama modellerinin GPT modellerine kıyasla daha çok yönlü ve hızlı olduğunu ve ayrıca PaLM modellerinin onu kullanılabilecek en iyi yapay zeka modellerinden biri haline getirdiğini iddia ediyor. Ancak bilgisayar korsanlığı veya güvenliğe özgü herhangi bir görev için bu, çok fazla eğitim veya kişisel girdi gerektirir. Bunun için bir eğitim modeli oluşturmak kolay değildir ancak bir kez eğitildikten sonra bu, oyunun kurallarını değiştirebilir.
Yapay zeka dünyasına yapılan yolculuk, otomasyon ve entegrasyonun şaşırtıcı etkisini gösteren inanılmaz derecede aydınlatıcı oldu. Yapay zekanın çeşitli sektörlerdeki yeteneklerini gördükten sonra çalışma ve etkileşim şeklimizi nasıl değiştirdiğini derinden takdir ediyorum. Düzenli operasyonların kesintisiz otomasyonunu gözlemlemekten yapay zekanın günlük hayata dahil edilmesini deneyimlemeye kadar öğrenme deneyimim bir aydınlanma oldu. Yapay zekanın karmaşıklıkları hakkında daha fazla şey öğrendikçe otomasyon ve entegrasyonun teknik fikirlerden daha fazlası olduğunu öğrendim; daha ziyade inovasyon için katalizör görevi görüyorlar. Bu yeni keşfedilen anlayışla artık yapay zekanın verimliliği ve işbirliğini geliştirme potansiyelinin sınırsız olduğu bir dünya görebiliyorum.
Bana LinkedIn üzerinden ulaşabilirsiniz. Herhangi bir endişeniz varsa aşağıya yorum yapabilirsiniz.
Okuduğunuz için teşekkürler.