พื้นที่เก็บข้อมูลของ TrafficLLM ซึ่งเป็นเฟรมเวิร์กการปรับ LLM สากลเพื่อเรียนรู้การนำเสนอการรับส่งข้อมูลที่มีประสิทธิภาพสำหรับ LLM แบบโอเพ่นซอร์สทั้งหมดในสถานการณ์จริง และปรับปรุงลักษณะทั่วไปในงานวิเคราะห์การรับส่งข้อมูลที่หลากหลาย
หมายเหตุ: รหัสนี้อิงจาก ChatGLM2 และ Llama2 ขอบคุณมากสำหรับผู้เขียน
[2024.10.28] เราได้อัปเดตโค้ดการปรับสำหรับการใช้ GLM4 เพื่อสร้าง TrafficLLM ซึ่งมีความเร็วในการปรับแต่งและการอนุมานที่เร็วกว่า ChatGLM2 ไปที่ Adapt2GLM4 เพื่อดูรายละเอียดเพิ่มเติม
TrafficLLM สร้างขึ้นบนเฟรมเวิร์กการปรับแต่งที่ซับซ้อนโดยใช้ภาษาธรรมชาติและข้อมูลการรับส่งข้อมูล ซึ่งเสนอเทคนิคต่อไปนี้เพื่อปรับปรุงอรรถประโยชน์ของโมเดลภาษาขนาดใหญ่ในการวิเคราะห์การรับส่งข้อมูลเครือข่าย
Tokenization โดเมนการรับส่งข้อมูล เพื่อเอาชนะช่องว่างระหว่างภาษาธรรมชาติและข้อมูลการรับส่งข้อมูลที่แตกต่างกัน TrafficLLM ได้แนะนำโทเค็นโดเมนการรับส่งข้อมูลเพื่อประมวลผลอินพุตที่หลากหลายของการตรวจจับการรับส่งข้อมูลและงานการสร้างสำหรับการปรับตัว LLM กลไกนี้จะขยายโทเค็นเนทีฟของ LLM ได้อย่างมีประสิทธิภาพ โดยการฝึกอบรมเฉพาะทางเกี่ยวกับโมเดลโทเค็นไนเซชันบนองค์กรโดเมนการรับส่งข้อมูลขนาดใหญ่
ไปป์ไลน์การปรับแต่งแบบสองขั้นตอน TrafficLLM ใช้ไปป์ไลน์การปรับแต่งแบบสองขั้นตอนเพื่อให้บรรลุการเรียนรู้การนำเสนอที่แข็งแกร่งของ LLM ในงานโดเมนการรับส่งข้อมูลที่แตกต่างกัน ไปป์ไลน์จะฝึก LLM ให้เข้าใจคำแนะนำและเรียนรู้รูปแบบการรับส่งข้อมูลที่เกี่ยวข้องกับงานในขั้นตอนต่างๆ ซึ่งสร้างขึ้นจากความเข้าใจงาน TrafficLLM และความสามารถในการให้เหตุผลด้านการรับส่งข้อมูลสำหรับการตรวจจับการรับส่งข้อมูลที่หลากหลายและงานการสร้าง
การปรับขยายได้พร้อมการปรับพารามิเตอร์แบบละเอียดที่มีประสิทธิภาพ (EA-PEFT) เพื่อปรับ LLM สำหรับลักษณะทั่วไปกับสภาพแวดล้อมการรับส่งข้อมูลใหม่ TrafficLLM เสนอการปรับที่ขยายได้ด้วยการปรับแต่งพารามิเตอร์ที่มีประสิทธิภาพ (EA-PEFT) เพื่ออัปเดตพารามิเตอร์แบบจำลองที่มีค่าใช้จ่ายต่ำ เทคนิคนี้จะแบ่งความสามารถของโมเดลในโมเดล PEFT ต่างๆ ซึ่งช่วยลดต้นทุนในสถานการณ์ไดนามิกที่เกิดจากการเปลี่ยนแปลงรูปแบบการรับส่งข้อมูล
เราเปิดตัวชุดข้อมูลการฝึกอบรมของ TrafficLLM ซึ่งประกอบด้วยข้อมูลการรับส่งข้อมูลมากกว่า 0.4 ล้านรายการ และคำสั่งของมนุษย์ 9,000 รายการสำหรับการปรับ LLM ในงานวิเคราะห์การรับส่งข้อมูลต่างๆ
Instruction Datasets
: ชุดข้อมูลคำสั่งใช้เพื่อช่วยให้ LLM เรียนรู้ความรู้โดเมนของการตรวจจับการรับส่งข้อมูลหรืองานการสร้าง และทำความเข้าใจว่างานใดควรดำเนินการในสถานการณ์ที่แตกต่างกัน
Traffic Datasets
: ชุดข้อมูลการรับส่งข้อมูลประกอบด้วยข้อมูลการปรับแต่งการรับส่งข้อมูลที่เราแยกมาจากชุดข้อมูลการรับส่งข้อมูลสาธารณะ ซึ่งช่วยให้ LLM เรียนรู้รูปแบบการรับส่งข้อมูลในงานดาวน์สตรีมที่แตกต่างกัน
ในการสร้างคลังภาษาธรรมชาติเพื่อเป็นคำสั่งของมนุษย์ใน TrafficLLM เราได้รวบรวมคำสั่งเฉพาะงาน 9,209 คำสั่งที่ดูแลโดยผู้เชี่ยวชาญและผู้ช่วย AI สถิติจะแสดงดังต่อไปนี้:
งานกระแสหลัก | งานปลายน้ำ | อักษรย่อ. | #ตัวอย่าง |
---|---|---|---|
การตรวจจับการจราจร | การตรวจจับการรับส่งข้อมูลมัลแวร์ | มทส | 1.0K |
การตรวจจับบอตเน็ต | บีเอ็นดี | 1.1K | |
การตรวจจับ DoH ที่เป็นอันตราย | เอ็มดีดี | 0.6K | |
การตรวจจับการโจมตีเว็บ | วด | 0.6K | |
การตรวจจับการโจมตี APT | อ.อ | 0.6K | |
การตรวจจับ VPN ที่เข้ารหัส | อีวีดี | 1.2K | |
การตรวจจับพฤติกรรมของทอร์ | จะแจ้งภายหลัง | 0.6K | |
การจำแนกประเภทแอปที่เข้ารหัส | อีเอซี | 0.6K | |
การพิมพ์ลายนิ้วมือเว็บไซต์ | ดับบลิวเอฟ | 0.6K | |
แนวคิดดริฟท์ | ซีดี | 0.6K | |
การสร้างทราฟฟิก | การสร้างทราฟฟิกมัลแวร์ | เอ็มทีจี | 0.6K |
การสร้างทราฟฟิก Botnet | บีทีจี | 0.1K | |
การสร้าง VPN ที่เข้ารหัส | อีวีจี | 0.4K | |
การสร้างแอปที่เข้ารหัส | อีเอจี | 0.6K |
เพื่อประเมินประสิทธิภาพของ TrafficLLM ในสถานการณ์เครือข่ายต่างๆ เราได้ดึงข้อมูลการปรับแต่งมากกว่า 0.4 ล้านชุดจากชุดข้อมูลการรับส่งข้อมูลสาธารณะเพื่อวัดความสามารถของ TrafficLLM ในการตรวจจับหรือสร้างการรับส่งข้อมูลที่เป็นอันตรายและไม่เป็นอันตราย สถิติจะแสดงดังต่อไปนี้:
ชุดข้อมูล | งาน | อักษรย่อ. | #ตัวอย่าง |
---|---|---|---|
USTC ทีเอฟซี 2016 | การตรวจจับการรับส่งข้อมูลมัลแวร์ | มทส | 50.7K |
ISCX บอตเน็ต 2014 | การตรวจจับบอตเน็ต | บีเอ็นดี | 25.0K |
DoHBrw 2020 | การตรวจจับ DoH ที่เป็นอันตราย | เอ็มดีดี | 47.8K |
ซีเอสไอซี 2010 | การตรวจจับการโจมตีเว็บ | วด | 34.5ก |
ดีเอพีที 2020 | การตรวจจับการโจมตี APT | อ.อ | 10.0K |
ISCX VPN 2016 | การตรวจจับ VPN ที่เข้ารหัส | อีวีดี | 64.8K |
ISCX ทอร์ 2016 | การตรวจจับพฤติกรรมของทอร์ | จะแจ้งภายหลัง | 40.0K |
ซีเอสทีเน็ต 2023 | การจำแนกประเภทแอปที่เข้ารหัส | อีเอซี | 97.6ก |
ซีดับเบิลยู-100 2018 | การพิมพ์ลายนิ้วมือเว็บไซต์ | ดับบลิวเอฟ | 7.4K |
APP-53 2023 | แนวคิดดริฟท์ | ซีดี | 109.8K |
1. การเตรียมสิ่งแวดล้อม 2. การฝึกอบรม TrafficLLM 2.1. เตรียมจุดตรวจฝึกล่วงหน้า 2.2. การประมวลผลชุดข้อมูลล่วงหน้า 2.3 การฝึกอบรม Traffic-Domain Tokenizer (ทางเลือก) 2.4. การปรับคำสั่งภาษาประสาท 2.5 การปรับแต่งการรับส่งข้อมูลเฉพาะงาน 2.6. การปรับขยายด้วย PEFT (EA-PEFT) 3. การประเมิน TrafficLLM 3.1. การเตรียมจุดตรวจและข้อมูล 3.2. การประเมินการวิ่งสารบัญ:
1. การเตรียมสภาพแวดล้อม [กลับสู่ด้านบน]
โปรดโคลน repo และติดตั้งสภาพแวดล้อมที่ต้องการโดยการรันคำสั่งต่อไปนี้
conda สร้าง -n Trafficllm หลาม = 3.9 conda เปิดใช้งาน Trafficllm# โคลน TrafficLLMgit โคลนของเรา https://github.com/ZGC-LLM-Safety/TrafficLLM.gitcd TrafficLLM# ติดตั้งไลบรารีที่จำเป็นpip ติดตั้ง -r ข้อกำหนด.txt# หาก trainingpip ติดตั้งชุดข้อมูล rouge_chinese nltk jieba
TrafficLLM ใช้เทคนิคหลักสามประการ ได้แก่ โทเค็นโดเมนการรับส่งข้อมูล เพื่อประมวลผลคำสั่งและข้อมูลการรับส่งข้อมูล ไปป์ไลน์ การปรับจูนแบบสองขั้นตอน เพื่อทำความเข้าใจความหมายข้อความและเรียนรู้รูปแบบการรับส่งข้อมูลในงานต่างๆ และ EA-PEFT เพื่ออัปเดต พารามิเตอร์แบบจำลองสำหรับการปรับสถานการณ์ใหม่
TrafficLLM ได้รับการฝึกอบรมโดยอิงจาก LLM แบบโอเพ่นซอร์สที่มีอยู่ โปรดปฏิบัติตามคำแนะนำเพื่อเตรียมจุดตรวจ
ChatGLM2
: เตรียม ChatGLM โมเดลพื้นฐาน ซึ่งเป็น LLM แบบโอเพ่นซอร์สพร้อมข้อกำหนดการใช้งานแบบเบา กรุณาดาวน์โหลดน้ำหนักของมันได้ที่นี่ โดยทั่วไปเราใช้โมเดล v2 พร้อมพารามิเตอร์ 6B
Other LLMs
: หากต้องการปรับ LLM อื่นๆ สำหรับงานวิเคราะห์การรับส่งข้อมูล คุณสามารถนำข้อมูลการฝึกอบรมกลับมาใช้ใหม่ใน repo และแก้ไขสคริปต์การฝึกอบรมตามคำแนะนำอย่างเป็นทางการ ตัวอย่างเช่น Llama2 จำเป็นต้องลงทะเบียนชุดข้อมูลใหม่ในการกำหนดค่า
เพื่อแยกข้อมูลการฝึกอบรมที่เหมาะสมสำหรับการเรียนรู้ LLM จากชุดข้อมูลการรับส่งข้อมูลดิบ เราได้ออกแบบตัวแยกข้อมูลเฉพาะเพื่อประมวลผลชุดข้อมูลการรับส่งข้อมูลล่วงหน้าสำหรับงานที่แตกต่างกัน รหัสการประมวลผลล่วงหน้ามีพารามิเตอร์ต่อไปนี้เพื่อกำหนดค่า
input
: เส้นทางชุดข้อมูลการรับส่งข้อมูลดิบ (เส้นทางไดเร็กทอรีหลักที่มีไดเร็กทอรีย่อยที่มีป้ายกำกับ แต่ละไดเร็กทอรีย่อยที่มีป้ายกำกับจะมีไฟล์ .pcap แบบดิบที่จะประมวลผลล่วงหน้า)
dataset_name
: ชื่อชุดข้อมูลการรับส่งข้อมูลดิบ (ช่วยตัดสินว่าชื่อนั้นลงทะเบียนในรหัสของ TrafficLLM หรือไม่)
traffic_task
: งานการตรวจจับหรืองานการสร้าง
granularity
: รายละเอียดระดับแพ็กเก็ตหรือระดับโฟลว์
output_path
: เส้นทางชุดข้อมูลการฝึกอบรมเอาท์พุต
output_name
: ชื่อชุดข้อมูลการฝึกอบรมเอาท์พุต
นี่เป็นอินสแตนซ์สำหรับประมวลผลชุดข้อมูลการรับส่งข้อมูลดิบล่วงหน้าสำหรับงานตรวจจับการรับส่งข้อมูลระดับแพ็กเก็ต
การประมวลผลซีดีล่วงหน้า python preprocess_dataset.py --input /Your/Raw/Dataset/Path --dataset_name /Your/Raw/Dataset/Name --traffic_task Detection --granularity packet --output_path /Your/Output/Dataset/Path --output_name /Your /Output/Dataset/Name
TrafficLLM แนะนำโทเค็นโดเมนการรับส่งข้อมูลเพื่อจัดการภาษาประสาทและข้อมูลการรับส่งข้อมูล หากคุณต้องการฝึกโทเค็นไนเซอร์แบบกำหนดเองด้วยชุดข้อมูลของคุณเอง โปรดแก้ไข model_name
และ data_path
ในโค้ด
model_name
: เส้นทางโมเดลพื้นฐานที่มีโทเค็นเนทีฟดั้งเดิม
data_path
: ชุดข้อมูลการฝึกอบรมที่แยกมาจากกระบวนการประมวลผลล่วงหน้า
กรุณาปฏิบัติตามคำสั่งเพื่อใช้รหัส
โทเค็นซีดี python Traffic_tokenizer.py
เตรียมข้อมูล: ข้อมูลการปรับแต่งคำสั่งภาษาประสาทคือชุดข้อมูลคำสั่งที่เรารวบรวมไว้เพื่อทำความเข้าใจงานวิเคราะห์ทราฟฟิก
เริ่มการปรับแต่ง: หลังจากขั้นตอนข้างต้น คุณสามารถเริ่มการปรับแต่งสเตจแรกได้โดยใช้ Trafficllm_stage1.sh มีตัวอย่างดังนี้:
PRE_SEQ_LEN=128 LR=2e-2 NUM_GPUS=1ส่งออก CUDA_VISIBLE_DEVICES=1 torchrun --standalone --nnodes=1 --nproc-per-node=$NUM_GPUS main.py --do_train --train_file ../datasets/instructions/instructions.json --validation_file ../datasets/instructions/instructions.json --preprocessing_num_workers 10 --prompt_column คำแนะนำ --response_column เอาต์พุต --เขียนทับ_แคช --cache_dir ../แคช --model_name_or_path ../models/chatglm2/chatglm2-6b --output_dir ../models/chatglm2/peft/instruction --เขียนทับ_output_dir --max_source_length 1,024 --max_target_length 32 --per_device_train_batch_size 1 --per_device_eval_batch_size 1 --gradient_accumulation_steps 16 --predict_with_generate --max_steps 20,000 --logging_steps 10 --save_steps 4000 --learning_rate $LR --pre_seq_len $PRE_SEQ_LEN
เตรียมข้อมูล: ชุดข้อมูลการปรับแต่งการรับส่งข้อมูลเฉพาะงานคือชุดข้อมูลการฝึกอบรมที่แยกมาจากขั้นตอนการประมวลผลล่วงหน้าสำหรับงานดาวน์สตรีมที่แตกต่างกัน
เริ่มต้นการปรับแต่ง: หลังจากขั้นตอนข้างต้น คุณสามารถเริ่มต้นการปรับแต่งขั้นที่สองได้โดยใช้ Trafficllm_stage2.sh มีตัวอย่างดังนี้:
PRE_SEQ_LEN=128 LR=2e-2 NUM_GPUS=1ส่งออก CUDA_VISIBLE_DEVICES=1 torchrun --standalone --nnodes=1 --nproc-per-node=$NUM_GPUS main.py --do_train --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 คำแนะนำ --response_column เอาต์พุต --เขียนทับ_แคช --cache_dir ../แคช --model_name_or_path ../models/chatglm2/chatglm2-6b --output_dir ../models/chatglm2/peft/ustc-tfc-2016-detection-packet --เขียนทับ_output_dir --max_source_length 1,024 --max_target_length 32 --per_device_train_batch_size 1 --per_device_eval_batch_size 1 --gradient_accumulation_steps 16 --predict_with_generate --max_steps 20,000 --logging_steps 10 --save_steps 4000 --learning_rate $LR --pre_seq_len $PRE_SEQ_LEN
TrafficLLM ใช้ EA-PEFT เพื่อจัดระเบียบโมเดลการปรับค่าพารามิเตอร์ที่มีประสิทธิภาพ (PEFT) พร้อมด้วยการปรับแบบขยายได้ ซึ่งสามารถช่วยให้ TrafficLLM ปรับเข้ากับ สภาพแวดล้อมใหม่ อะแดปเตอร์ TrafficLLM ช่วยให้การดำเนินงานมีความยืดหยุ่นในการอัพเดตรุ่นเก่าหรือลงทะเบียนงานใหม่
model_name
: เส้นทางของโมเดลพื้นฐาน
tuning_data
: ชุดข้อมูลสภาพแวดล้อมใหม่
adaptation_task
: อัปเดตหรือลงทะเบียน (อัปเดตรุ่นเก่าหรือลงทะเบียนงานใหม่)
task_name
: ชื่องานดาวน์สตรีมที่ต้องการอัพเดตหรือแทรก
มีตัวอย่างในการอัปเดต TrafficLLM ด้วยงานการตรวจจับปริมาณข้อมูลมัลแวร์ (MTD)
ซีดี EA-PEFT python ea-peft.py --model_name /Your/Base/Model/Path --tuning_data /Your/New/Dataset/Path --adaptation_task update --task_name MTD
จุดตรวจสอบ: คุณสามารถลองประเมิน TrafficLLM ได้โดยใช้แบบจำลองของคุณเองหรือจุดตรวจสอบที่เราเผยแพร่
ข้อมูล: ในระหว่างขั้นตอนการประมวลผลล่วงหน้า เราจะแยกชุดข้อมูลทดสอบและสร้างไฟล์ป้ายกำกับสำหรับชุดข้อมูลต่างๆ เพื่อการประเมินผล โปรดดูรหัสการประมวลผลล่วงหน้า
เพื่อวัดประสิทธิภาพของ TrafficLLM สำหรับงานดาวน์สตรีมต่างๆ โปรดเรียกใช้โค้ดการประเมิน
model_name
: เส้นทางของโมเดลพื้นฐาน
traffic_task
: งานการตรวจจับหรืองานการสร้าง
test_file
: ชุดข้อมูลทดสอบที่แยกออกมาระหว่างขั้นตอนการประมวลผลล่วงหน้า
label_file
: ไฟล์เลเบลที่ถูกแยกระหว่างขั้นตอนการประมวลผลล่วงหน้า
ptuning_path
: พาธโมเดล PEFT สำหรับการประเมินเฉพาะงาน
มีตัวอย่างในการรันการประเมินผลงาน MTD
หลามการประเมินผล.py --model_name /Your/Base/Model/Path --traffic_task การตรวจหา --test_file ชุดข้อมูล/ustc-tfc-2016/ustc-tfc-2016_detection_packet_test.json --label_file ชุดข้อมูล/ustc-tfc-2016/ustc- tfc-2016_label.json --ptuning_path models/chatglm2/peft/ustc-tfc-2016-detection-packet/checkpoints-20000/
คุณสามารถปรับใช้ TrafficLLM บนอุปกรณ์ภายในเครื่องของคุณได้ ขั้นแรก ให้กำหนดค่าเส้นทางโมเดลใน config.json เพื่อลงทะเบียนโมเดล PEFT ที่รวบรวมจากขั้นตอนการฝึก มีตัวอย่างในการลงทะเบียน 6 งานใน TrafficLLM:
{ "model_path": "models/chatglm2/chatglm2-6b/", "peft_path": "models/chatglm2/peft/", "peft_set": { "NLP": " Instruction/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/" }, "งาน": { "การตรวจจับการรับส่งข้อมูลมัลแวร์": "MTD", "การตรวจจับบอตเน็ต": "BND", "การตรวจจับการโจมตีเว็บ": "WAD", "การตรวจจับการโจมตี APT": "AAD", "การตรวจจับ VPN ที่เข้ารหัส ": "EVD", "การตรวจจับพฤติกรรมของทอร์": "TBD" - }
จากนั้น คุณควรเพิ่ม preprompt ในฟังก์ชัน prepromt
ของ inference.py และ Trafficllm_server.py ข้อความล่วงหน้าคือข้อความนำหน้าที่ใช้ในข้อมูลการฝึกอบรมระหว่างการปรับการรับส่งข้อมูลเฉพาะงาน
หากต้องการสนทนากับ TrafficLLM ในโหมดเทอร์มินัล คุณสามารถเรียกใช้คำสั่งต่อไปนี้:
python inference.py --config=config.json --prompt="Your Instruction Text +: + Traffic Data"
คุณสามารถ เปิดการสาธิตเว็บไซต์ของ TrafficLLM โดยใช้คำสั่งต่อไปนี้:
streamlit run Trafficllm_server.py
การสาธิตนี้รันเว็บเซิร์ฟเวอร์ของ TrafficLLM เข้าถึง http://Your-Server-IP:Port
เพื่อแชทในกล่องแชท
ขอขอบคุณอย่างยิ่งกับงานที่เกี่ยวข้อง ChatGLM2 และ Llama2 ซึ่งทำหน้าที่เป็นรากฐานสำหรับเฟรมเวิร์กและโค้ดของเรา การออกแบบอาคาร TrafficLLM ได้รับแรงบันดาลใจจาก ET-BERT และ GraphGPT ขอบคุณสำหรับผลงานที่ยอดเยี่ยมของพวกเขา