Gudang TrafficLLM , kerangka adaptasi LLM universal untuk mempelajari representasi lalu lintas yang kuat untuk semua LLM sumber terbuka dalam skenario dunia nyata dan meningkatkan generalisasi di berbagai tugas analisis lalu lintas.
Catatan: kode ini didasarkan pada ChatGLM2 dan Llama2. Terima kasih banyak kepada para penulis.
[28.10.2024] Kami telah memperbarui kode adaptasi untuk menggunakan GLM4 untuk membangun TrafficLLM, yang memiliki kecepatan penyetelan dan inferensi lebih cepat daripada ChatGLM2. Buka Adapt2GLM4 untuk detail lebih lanjut.
TrafficLLM dibangun di atas kerangka penyesuaian canggih menggunakan bahasa alami dan data lalu lintas, yang mengusulkan teknik berikut untuk meningkatkan kegunaan model bahasa besar dalam analisis lalu lintas jaringan.
Tokenisasi Domain Lalu Lintas. Untuk mengatasi kesenjangan modalitas antara bahasa alami dan data lalu lintas yang heterogen, TrafficLLM memperkenalkan tokenisasi domain lalu lintas untuk memproses beragam masukan tugas deteksi lalu lintas dan pembuatan untuk adaptasi LLM. Mekanisme ini secara efektif memperluas tokenizer asli LLM dengan melatih model tokenisasi khusus pada korpora domain lalu lintas skala besar.
Pipa Penyetelan Dua Tahap. TrafficLLM menggunakan saluran penyetelan dua tahap untuk mencapai pembelajaran representasi LLM yang kuat di berbagai tugas domain lalu lintas. Pipeline ini melatih LLM untuk memahami instruksi dan mempelajari pola lalu lintas terkait tugas pada berbagai tahapan, yang dibangun berdasarkan pemahaman tugas TrafficLLM dan kemampuan penalaran lalu lintas untuk beragam tugas deteksi dan pembuatan lalu lintas.
Adaptasi yang Dapat Diperluas dengan Penyempurnaan Parameter-Efektif (EA-PEFT). Untuk mengadaptasi LLM untuk generalisasi ke lingkungan lalu lintas baru, TrafficLLM mengusulkan adaptasi yang dapat diperluas dengan penyempurnaan efektif parameter (EA-PEFT) untuk memperbarui parameter model dengan overhead rendah. Teknik ini membagi kemampuan model dalam model PEFT yang berbeda, yang membantu meminimalkan biaya pada skenario dinamis yang ditimbulkan oleh perubahan pola lalu lintas.
Kami merilis kumpulan data pelatihan TrafficLLM, yang berisi lebih dari 0,4 juta data lalu lintas dan 9 ribu instruksi manusia untuk adaptasi LLM di berbagai tugas analisis lalu lintas.
Instruction Datasets
: Kumpulan data instruksi digunakan untuk membantu LLM mempelajari pengetahuan domain tentang deteksi lalu lintas atau tugas pembuatan dan memahami tugas mana yang harus dilakukan dalam skenario berbeda.
Traffic Datasets
: Kumpulan data lalu lintas berisi data penyetelan lalu lintas yang kami ekstrak dari kumpulan data lalu lintas publik, yang membantu LLM mempelajari pola lalu lintas dalam tugas hilir yang berbeda.
Untuk membangun korpus bahasa alami sebagai instruksi manusia di TrafficLLM, kami mengumpulkan 9.209 instruksi khusus tugas yang diawasi oleh para ahli dan asisten AI. Statistiknya ditampilkan sebagai berikut:
Tugas Arus Utama | Tugas Hilir | Singkatan. | #Mencicipi |
---|---|---|---|
Deteksi Lalu Lintas | Deteksi Lalu Lintas Malware | MTD | 1.0K |
Deteksi Botnet | BND | 1.1K | |
Deteksi DoH Berbahaya | MDD | 0,6K | |
Deteksi Serangan Web | GUMPALAN | 0,6K | |
Deteksi Serangan APT | AD | 0,6K | |
Deteksi VPN Terenkripsi | EVD | 1.2K | |
Deteksi Perilaku Tor | TBD | 0,6K | |
Klasifikasi Aplikasi Terenkripsi | EAC | 0,6K | |
Sidik Jari Situs Web | WF | 0,6K | |
Konsep Melayang | CD | 0,6K | |
Generasi Lalu Lintas | Generasi Lalu Lintas Malware | MTG | 0,6K |
Generasi Lalu Lintas Botnet | BTG | 0,1K | |
Generasi VPN Terenkripsi | EVG | 0,4K | |
Pembuatan Aplikasi Terenkripsi | EAG | 0,6K |
Untuk mengevaluasi kinerja TrafficLLM pada berbagai skenario jaringan, kami mengekstraksi lebih dari 0,4 juta data penyetelan dari kumpulan data lalu lintas yang tersedia untuk umum untuk mengukur kemampuan TrafficLLM dalam mendeteksi atau menghasilkan lalu lintas berbahaya dan tidak berbahaya. Statistiknya ditampilkan sebagai berikut:
Kumpulan data | Tugas | Singkatan. | #Mencicipi |
---|---|---|---|
USTC TFC 2016 | Deteksi Lalu Lintas Malware | MTD | 50,7K |
Botnet ISCX 2014 | Deteksi Botnet | BND | 25.0K |
DoHBrw 2020 | Deteksi DoH Berbahaya | MDD | 47.8K |
CSIC 2010 | Deteksi Serangan Web | GUMPALAN | 34,5K |
DAPT 2020 | Deteksi Serangan APT | AD | 10.0K |
ISCX VPN 2016 | Deteksi VPN Terenkripsi | EVD | 64.8K |
ISCXTor 2016 | Deteksi Perilaku Tor | TBD | 40.0K |
CSTNET 2023 | Klasifikasi Aplikasi Terenkripsi | EAC | 97.6K |
CW-100 2018 | Sidik Jari Situs Web | WF | 7.4K |
APLIKASI-53 2023 | Konsep Melayang | CD | 109.8K |
1. Penyiapan Lingkungan 2. Pelatihan Lalu LintasLLM 2.1. Mempersiapkan Pos Pemeriksaan Terlatih 2.2. Pemrosesan Awal Set Data 2.3. Pelatihan Traffic-Domain Tokenizer (Opsional) 2.4. Penyetelan Instruksi Bahasa Neural 2.5. Penyetelan Lalu Lintas Khusus Tugas 2.6. Adaptasi yang Dapat Diperluas dengan PEFT (EA-PEFT) 3. Evaluasi Lalu LintasLLM 3.1. Mempersiapkan Pos Pemeriksaan dan Data 3.2. Evaluasi BerjalanDaftar Isi :
1. Persiapan Lingkungan [Kembali ke Atas]
Harap kloning repo dan instal lingkungan yang diperlukan dengan menjalankan perintah berikut.
conda create -n trafficllm python=3.9 conda aktifkan trafficllm# Kloning TrafficLLMgit clone kami https://github.com/ZGC-LLM-Safety/TrafficLLM.gitcd TrafficLLM# Instal perpustakaan yang diperlukanpip install -r persyaratan.txt# Jika trainingpip install rouge_chinese nltk jieba dataset
TrafficLLM menggunakan tiga teknik inti: tokenisasi domain lalu lintas untuk memproses instruksi dan data lalu lintas, jalur penyetelan dua tahap untuk memahami semantik teks dan mempelajari pola lalu lintas di berbagai tugas, dan EA-PEFT untuk memperbarui parameter model untuk adaptasi skenario baru.
TrafficLLM dilatih berdasarkan LLM sumber terbuka yang ada. Silakan ikuti instruksi untuk mempersiapkan pos pemeriksaan.
ChatGLM2
: Siapkan model dasar ChatGLM, yang merupakan LLM sumber terbuka dengan persyaratan penerapan yang ringan. Silakan unduh bobotnya di sini. Kami biasanya menggunakan model v2 dengan parameter 6B.
Other LLMs
: Untuk mengadaptasi LLM lain untuk tugas analisis lalu lintas, Anda dapat menggunakan kembali data pelatihan di repo dan memodifikasi skrip pelatihannya sesuai dengan instruksi resmi. Misalnya, Llama2 diperlukan untuk mendaftarkan kumpulan data baru di konfigurasi.
Untuk mengekstrak data pelatihan yang sesuai untuk pembelajaran LLM dari kumpulan data lalu lintas mentah, kami merancang ekstraktor khusus untuk memproses kumpulan data lalu lintas terlebih dahulu untuk tugas yang berbeda. Kode prapemrosesan berisi parameter berikut untuk dikonfigurasi.
input
: Jalur kumpulan data lalu lintas mentah (Jalur direktori utama yang berisi subdirektori berlabel. Setiap subdirektori berlabel berisi file .pcap mentah yang akan diproses sebelumnya).
dataset_name
: Nama dataset lalu lintas mentah (Ini membantu menilai apakah nama tersebut telah terdaftar dalam kode TrafficLLM).
traffic_task
: Tugas deteksi atau tugas pembuatan.
granularity
: granularitas tingkat paket atau tingkat aliran.
output_path
: Jalur himpunan data pelatihan keluaran.
output_name
: Nama himpunan data pelatihan keluaran.
Ini adalah contoh untuk melakukan praproses kumpulan data lalu lintas mentah untuk tugas deteksi lalu lintas tingkat paket.
proses awal cd python preprocess_dataset.py --input /Your/Raw/Dataset/Path --dataset_name /Your/Raw/Dataset/Name --traffic_task deteksi --granularity packet --output_path /Your/Output/Dataset/Path --output_name /Your /Output/Dataset/Name
TrafficLLM memperkenalkan tokenizer domain lalu lintas untuk menangani bahasa saraf dan data lalu lintas. Jika Anda ingin melatih tokenizer khusus dengan kumpulan data Anda sendiri, harap ubah model_name
dan data_path
dalam kode.
model_name
: Jalur model dasar yang berisi tokenizer asli.
data_path
: Kumpulan data pelatihan yang diekstraksi dari proses prapemrosesan.
Silakan ikuti perintah untuk menggunakan kode tersebut.
tokenisasi cd python traffic_tokenizer.py
Siapkan data: Data penyetelan instruksi bahasa saraf adalah kumpulan data instruksi yang kami kumpulkan untuk pemahaman tugas analisis lalu lintas.
Mulai penyetelan: Setelah langkah-langkah di atas, Anda dapat memulai penyetelan tahap pertama dengan menggunakan trafficllm_stage1.sh. Ada contoh seperti di bawah ini:
PRE_SEQ_LEN=128 LR=2e-2 NUM_GPUS=1ekspor CUDA_VISIBLE_DEVICES=1 torchrun --standalone --nnodes=1 --nproc-per-node=$NUM_GPUS main.py --lakukan_latihan --train_file ../datasets/instructions/instructions.json --validation_file ../datasets/instructions/instructions.json --preprocessing_num_workers 10 --prompt_column instruksi --response_kolom keluaran --overwrite_cache --cache_dir ../cache --model_name_or_path ../models/chatglm2/chatglm2-6b --output_dir ../models/chatglm2/peft/instruction --overwrite_output_dir --max_source_length 1024 --max_target_length 32 --per_device_train_batch_size 1 --per_device_eval_batch_size 1 --gradien_akumulasi_langkah 16 --predict_with_generate --max_steps 20000 --logging_langkah 10 --simpan_langkah 4000 --nilai_belajar $LR --pre_seq_len $PRE_SEQ_LEN
Mempersiapkan data: Kumpulan data penyetelan lalu lintas khusus tugas adalah kumpulan data pelatihan yang diekstraksi dari langkah prapemrosesan untuk berbagai tugas hilir.
Mulai penyetelan: Setelah langkah-langkah di atas, Anda dapat memulai penyetelan tahap kedua dengan menggunakan trafficllm_stage2.sh. Ada contoh seperti di bawah ini:
PRE_SEQ_LEN=128 LR=2e-2 NUM_GPUS=1ekspor CUDA_VISIBLE_DEVICES=1 torchrun --standalone --nnodes=1 --nproc-per-node=$NUM_GPUS main.py --lakukan_latihan --train_file ../datasets/ustc-tfc-2016/ustc-tfc-2016_detection_packet_train.json --validation_file ../datasets/ustc-tfc-2016/ustc-tfc-2016_detection_packet_train.json --preprocessing_num_workers 10 --prompt_column instruksi --response_kolom keluaran --overwrite_cache --cache_dir ../cache --model_name_or_path ../models/chatglm2/chatglm2-6b --output_dir ../models/chatglm2/peft/ustc-tfc-2016-detection-packet --overwrite_output_dir --max_source_length 1024 --max_target_length 32 --per_device_train_batch_size 1 --per_device_eval_batch_size 1 --gradien_akumulasi_langkah 16 --predict_with_generate --max_steps 20000 --logging_langkah 10 --simpan_langkah 4000 --nilai_belajar $LR --pre_seq_len $PRE_SEQ_LEN
TrafficLLM menggunakan EA-PEFT untuk mengatur model penyempurnaan efektif parameter (PEFT) dengan adaptasi yang dapat diperluas, yang dapat membantu TrafficLLM beradaptasi dengan mudah lingkungan baru. Adaptor TrafficLLM memungkinkan operasi fleksibel untuk memperbarui model lama atau mendaftarkan tugas baru.
model_name
: Jalur model dasar.
tuning_data
: Kumpulan data lingkungan baru.
adaptation_task
: Perbarui atau daftar (perbarui model lama atau daftarkan tugas baru).
task_name
: Nama tugas hilir yang akan diperbarui atau disisipkan.
Ada contoh untuk memperbarui TrafficLLM dengan tugas malware traffic daeteksi (MTD).
cd EA-PEFT python ea-peft.py --model_name /Your/Base/Model/Path --tuning_data /Your/New/Dataset/Path --adaptation_task update --task_name MTD
Pos Pemeriksaan: Anda dapat mencoba mengevaluasi TrafficLLM dengan menggunakan model Anda sendiri atau pos pemeriksaan yang kami rilis.
Data: Selama langkah prapemrosesan, kami membagi kumpulan data pengujian dan membuat file label untuk kumpulan data berbeda untuk evaluasi. Silakan merujuk ke kode prapemrosesan.
Untuk mengukur efektivitas TrafficLLM untuk berbagai tugas hilir, jalankan kode evaluasi.
model_name
: Jalur model dasar.
traffic_task
: Tugas deteksi atau tugas pembuatan.
test_file
: Kumpulan data pengujian diekstraksi selama langkah prapemrosesan.
label_file
: File label diekstraksi selama langkah prapemrosesan.
ptuning_path
: Jalur model PEFT untuk evaluasi tugas spesifik.
Ada contoh untuk menjalankan evaluasi pada tugas MTD.
evaluasi python.py --model_name /Your/Base/Model/Path --traffic_task deteksi --test_file datasets/ustc-tfc-2016/ustc-tfc-2016_detection_packet_test.json --label_file datasets/ustc-tfc-2016/ustc- tfc-2016_label.json --ptuning_path models/chatglm2/peft/ustc-tfc-2016-detection-packet/checkpoints-20000/
Anda dapat menerapkan TrafficLLM di perangkat lokal Anda. Pertama, konfigurasikan jalur model di config.json untuk mendaftarkan model PEFT yang dikumpulkan dari langkah-langkah pelatihan. Ada contoh untuk mendaftarkan 6 tugas di TrafficLLM:
{ "model_path": "models/chatglm2/chatglm2-6b/", "peft_path": "models/chatglm2/peft/", "peft_set": { "NLP": " instruksi/checkpoint-8000/", "MTD": "ustc-tfc-2016-detection-packet/checkpoint-10000/", "BND": "iscx-botnet-2014-detection-packet/checkpoint-5000/", "WAD": "csic-2010-detection-packet/checkpoint-6000/", "AAD": "dapt-2020-detection-packet/checkpoint-20000/", "EVD": "iscx-vpn-2016-detection -packet/checkpoint-4000/", "TBD": "iscx-tor-2016-detection-packet/checkpoint-10000/" }, "tugas": { "Deteksi Lalu Lintas Malware": "MTD", "Deteksi Botnet": "BND", "Deteksi Serangan Web": "WAD", "Deteksi Serangan APT": "AAD", "Deteksi VPN Terenkripsi ": "EVD", "Deteksi Perilaku Tor": "TBD" } }
Kemudian Anda harus menambahkan preprompt di fungsi prepromt
inference.py dan trafficllm_server.py. Preprompt adalah teks awalan yang digunakan dalam data pelatihan selama penyetelan lalu lintas khusus tugas.
Untuk mengobrol dengan TrafficLLM dalam mode terminal, Anda dapat menjalankan perintah berikut:
python inference.py --config=config.json --prompt="Teks Instruksi Anda +: + Data Lalu Lintas"
Anda dapat luncurkan demo situs web TrafficLLM menggunakan perintah berikut:
streamlit run trafficllm_server.py
Demo ini menjalankan server Web TrafficLLM. Akses http://Your-Server-IP:Port
untuk mengobrol di kotak obrolan.
Kasih Terima kasih banyak atas kerja terkait ChatGLM2 dan Llama2 yang berfungsi sebagai landasan bagi kerangka kerja dan kode kami. Desain bangunan TrafficLLM terinspirasi oleh ET-BERT dan GraphGPT. Terima kasih atas karya luar biasa mereka.