Репозиторий TrafficLLM , универсальной среды адаптации LLM для изучения надежного представления трафика для всех LLM с открытым исходным кодом в реальных сценариях и улучшения обобщения для различных задач анализа трафика.
Примечание. Этот код основан на ChatGLM2 и Llama2. Большое спасибо авторам.
[2024.10.28] Мы обновили код адаптации для использования GLM4 для создания TrafficLLM, который имеет более высокую скорость настройки и вывода, чем ChatGLM2. Для получения более подробной информации перейдите к Adapt2GLM4.
TrafficLLM построен на сложной платформе тонкой настройки с использованием естественного языка и данных о трафике, которая предлагает следующие методы для повышения полезности больших языковых моделей при анализе сетевого трафика.
Токенизация трафик-домена. Чтобы преодолеть модальный разрыв между естественным языком и гетерогенными данными о трафике, TrafficLLM вводит токенизацию трафика для обработки разнообразных входных данных по обнаружению и генерации трафика для адаптации LLM. Этот механизм эффективно расширяет собственный токенизатор LLM, специализируясь на модели токенизации на крупномасштабных корпусах доменов трафика.
Двухэтапный конвейер настройки. TrafficLLM использует двухэтапный конвейер настройки для достижения надежного обучения представлению LLM для различных задач в области трафика. Конвейер обучает LLM понимать инструкции и изучать шаблоны трафика, связанные с задачами, на разных этапах, что основано на понимании задач TrafficLLM и способностях анализа трафика для различных задач обнаружения и генерации трафика.
Расширяемая адаптация с точной настройкой с учетом параметров (EA-PEFT). Чтобы адаптировать LLM для обобщения к новым условиям дорожного движения, TrafficLLM предлагает расширяемую адаптацию с точной настройкой с учетом параметров (EA-PEFT) для обновления параметров модели с низкими накладными расходами. Этот метод разделяет возможности модели в разных моделях PEFT, что помогает минимизировать затраты на динамические сценарии, возникающие из-за изменений структуры трафика.
Мы выпустили наборы обучающих данных TrafficLLM, которые содержат более 0,4 млн данных о трафике и 9 тыс. человеческих инструкций для адаптации LLM к различным задачам анализа трафика.
Instruction Datasets
: наборы данных инструкций используются, чтобы помочь LLM изучить предметные знания задач обнаружения или генерации трафика и понять, какие задачи следует выполнять в различных сценариях.
Traffic Datasets
: наборы данных о трафике содержат данные настройки трафика, которые мы извлекли из общедоступных наборов данных о трафике, что помогает LLM изучить структуру трафика в различных последующих задачах.
Чтобы создать корпус естественного языка в виде человеческих инструкций в TrafficLLM, мы собрали 9209 инструкций для конкретных задач под контролем экспертов и помощников ИИ. Статистика представлена следующим образом:
Основные задачи | Последующие задачи | Сокращение. | #Образец |
---|---|---|---|
Обнаружение трафика | Обнаружение трафика вредоносных программ | МТД | 1,0 тыс. |
Обнаружение ботнетов | БНД | 1,1 тыс. | |
Обнаружение вредоносного DoH | МДД | 0,6К | |
Обнаружение веб-атак | ВАД | 0,6К | |
Обнаружение APT-атак | ААД | 0,6К | |
Обнаружение зашифрованного VPN | ЭВД | 1,2 тыс. | |
Обнаружение поведения Tor | подлежит уточнению | 0,6К | |
Классификация зашифрованных приложений | ЕАС | 0,6К | |
Отпечатки веб-сайта | ВФ | 0,6К | |
Концептуальный дрифт | компакт-диск | 0,6К | |
Генерация трафика | Генерация вредоносного трафика | МТГ | 0,6К |
Генерация ботнет-трафика | БТГ | 0,1К | |
Генерация зашифрованного VPN | ЕВГ | 0,4К | |
Генерация зашифрованных приложений | ЕАГ | 0,6К |
Чтобы оценить производительность TrafficLLM в различных сетевых сценариях, мы извлекли более 0,4 млн данных настройки из общедоступных наборов данных о трафике, чтобы измерить возможности TrafficLLM обнаруживать или генерировать вредоносный и безопасный трафик. Статистика представлена следующим образом:
Наборы данных | Задачи | Сокращение. | #Образец |
---|---|---|---|
УСТЦ ТФК 2016 | Обнаружение трафика вредоносных программ | МТД | 50,7 тыс. |
ISCX-ботнет 2014 | Обнаружение ботнетов | БНД | 25,0 тыс. |
ДоХБрв 2020 | Обнаружение вредоносного DoH | МДД | 47,8 тыс. |
ЦНИЦ 2010 | Обнаружение веб-атак | ВАД | 34,5 тыс. |
ДАПТ 2020 | Обнаружение APT-атак | ААД | 10,0 тыс. |
ISCX VPN 2016 | Обнаружение зашифрованного VPN | ЭВД | 64,8 тыс. |
ISCX Тор 2016 | Обнаружение поведения Tor | подлежит уточнению | 40,0 тыс. |
ЦСТНЕТ 2023 | Классификация зашифрованных приложений | ЕАС | 97,6 тыс. |
CW-100 2018 г. | Отпечатки веб-сайта | ВФ | 7,4К |
АПП-53 2023 | Концептуальный дрифт | компакт-диск | 109,8 тыс. |
1. Подготовка среды 2. Обучение TrafficLLM 2.1. Подготовка предварительно обученной контрольной точки 2.2. Предварительная обработка набора данных 2.3. Обучение токенизатору домена трафика (необязательно) 2.4. Настройка инструкций нейронного языка 2.5. Настройка трафика для конкретных задач 2.6. Расширяемая адаптация с помощью PEFT (EA-PEFT) 3. Оценка TrafficLLM 3.1. Подготовка контрольных точек и данных 3.2. Проведение оценкиОглавление:
1. Подготовка среды [Вернуться к началу]
Клонируйте репозиторий и установите необходимую среду, выполнив следующие команды.
conda create -n Trafficllm Python=3.9 conda active Trafficllm# Клонируйте наш клон TrafficLLMgit https://github.com/ZGC-LLM-Safety/TrafficLLM.gitcd TrafficLLM# Установите необходимые библиотеки.
TrafficLLM использует три основных метода: токенизацию трафика для обработки инструкций и данных трафика, двухэтапный конвейер настройки для понимания семантики текста и изучения шаблонов трафика для различных задач, а также EA-PEFT для обновления. параметры модели для адаптации нового сценария.
TrafficLLM обучается на основе существующих LLM с открытым исходным кодом. Пожалуйста, следуйте инструкциям по подготовке контрольно-пропускных пунктов.
ChatGLM2
: подготовьте базовую модель ChatGLM, которая представляет собой LLM с открытым исходным кодом и упрощенными требованиями к развертыванию. Пожалуйста, загрузите его веса здесь. Обычно мы используем модель v2 с параметрами 6B.
Other LLMs
: чтобы адаптировать другие LLM для задач анализа трафика, вы можете повторно использовать данные обучения в репозитории и модифицировать их сценарии обучения в соответствии с официальными инструкциями. Например, 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 обнаружение --пакет детализации --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. ЛР=2е-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 вывод --overwrite_cache --cache_dir ../cache --имя_модели_или_путь ../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 --gradient_accumulation_steps 16 --predict_with_generate --max_steps 20000 --logging_steps 10 --save_steps 4000 --learning_rate $LR --pre_seq_len $PRE_SEQ_LEN
Подготовка данных: наборы данных настройки трафика для конкретной задачи — это наборы обучающих данных, извлеченные на этапе предварительной обработки для различных последующих задач.
Начало настройки. После вышеупомянутых шагов вы можете начать настройку второго этапа, используя Trafficllm_stage2.sh. Ниже приведен пример:
PRE_SEQ_LEN=128. ЛР=2е-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 вывод --overwrite_cache --cache_dir ../cache --имя_модели_или_путь ../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 --gradient_accumulation_steps 16 --predict_with_generate --max_steps 20000 --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).
компакт-диск ЕА-ПЕФТ 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.
python Assessment.py --model_name /Your/Base/Model/Path --traffic_task обнаружение --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/
Вы можете развернуть TrafficLLM на своем локальном устройстве. Сначала настройте путь к модели в config.json, чтобы зарегистрировать модели PEFT, собранные на этапах обучения. Вот пример регистрации 6 задач в TrafficLLM:
{ "model_path": "models/chatglm2/chatglm2-6b/", "peft_path": "models/chatglm2/peft/", "peft_set": { "NLP": " инструкция/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/" }, "tasks": { "Обнаружение вредоносного трафика": "MTD", "Обнаружение ботнетов": "BND", "Обнаружение веб-атак": "WAD", "Обнаружение атак APT": "AAD", "Обнаружение зашифрованных VPN" ": "EVD", "Обнаружение поведения Tor": "TBD" } }
Затем вам следует добавить предварительное приглашение в функцию prepromt
файлов inference.py и Trafficllm_server.py. Предварительное приглашение — это текст-префикс, используемый в обучающих данных во время настройки трафика для конкретной задачи.
Чтобы пообщаться с TrafficLLM в режиме терминала, вы можете запустить следующую команду:
python inference.py --config=config.json --prompt="Текст вашей инструкции + <пакет>: + Данные о трафике"
Вы можете запустите демонстрационную версию веб-сайта TrafficLLM с помощью следующей команды:
streamlit run Trafficllm_server.py
Эта демонстрационная версия запускает веб-сервер TrafficLLM. Откройте http://Your-Server-IP:Port
для общения в окне чата.
Большое спасибо за соответствующую работу ChatGLM2 и Llama2, которая служит основой для нашей структуры и кодов. Дизайн здания TrafficLLM вдохновлен ET-BERT и GraphGPT. Спасибо за их замечательные работы.