Qwen2.5‑Coder‑1.5B Secure Code DoRA Adapter
Адаптер DoRA/LoRA для Qwen/Qwen2.5-Coder-1.5B-Instruct, дообученный под генерацию более безопасного кода и исправление уязвимостей.
Обучение велось на парах «уязвимый код → безопасный код» на основе датасета Big‑Vul.
Model Details
- Base model:
Qwen/Qwen2.5-Coder-1.5B-Instruct
- Adapter type: DoRA (Weight‑Decomposed LoRA) через PEFT
- Trainable params: ~4.46M (≈0.29% от 1.55B)
- Languages: в основном код (C/C++, Python, SQL‑фрагменты) + англ./рус. комментарии и описания
- License: следует лицензии базовой модели Qwen2.5‑Coder (см. карточку base‑модели)
- Intended format: chat‑модель с
apply_chat_template
Intended Use
Адаптер предназначен для:
- генерации более безопасных SQL‑запросов и паттернов работы с БД;
- исправления уязвимых фрагментов кода (в первую очередь C/C++ из Big‑Vul);
- объяснения причин уязвимости и предложения безопасной альтернативы.
Примеры задач:
- «Напиши функцию, выполняющую SQL‑запрос по
user_id безопасным образом».
- «Вот фрагмент с
cursor.execute(f"...") — объясни, почему он небезопасен, и перепиши безопасно».
- «Дан уязвимый C/C++‑код — предложи исправленный вариант».
Out‑of‑scope
- Общий чат‑ассистент вне области кибербезопасности.
- Генерация эксплойтов, PoC‑атак и других наступательных сценариев.
- Любое использование, нарушающее лицензию/Acceptable Use базовой модели Qwen.
How to Use
1from transformers import AutoModelForCausalLM, AutoTokenizer
2from peft import PeftModel
3import torch
4
5base_model_id = "Qwen/Qwen2.5-Coder-1.5B-Instruct"
6adapter_id = "<your-username>/qwen2.5-coder-1.5b-secure-codegen" # замените на ваш репозиторий
7
8tokenizer = AutoTokenizer.from_pretrained(base_model_id, trust_remote_code=True)
9base = AutoModelForCausalLM.from_pretrained(
10 base_model_id,
11 torch_dtype=torch.bfloat16 if torch.backends.mps.is_available() else torch.float32,
12 device_map="auto" if torch.backends.mps.is_available() else None,
13 trust_remote_code=True,
14)
15model = PeftModel.from_pretrained(base, adapter_id)
16model.eval()
17
18device = next(model.parameters()).device
19prompt = "Напиши на Python функцию, которая выполняет SQL-запрос по user_id безопасным образом."
20messages = [{"role": "user", "content": prompt}]
21
22chat_text = tokenizer.apply_chat_template(
23 messages,
24 tokenize=False,
25 add_generation_prompt=True,
26)
27enc = tokenizer(chat_text, return_tensors="pt").to(device)
28
29with torch.no_grad():
30 out = model.generate(
31 **enc,
32 max_new_tokens=256,
33 do_sample=False,
34 pad_token_id=tokenizer.eos_token_id,
35 )
36
37generated = out[0, enc["input_ids"].shape[-1]:]
38print(tokenizer.decode(generated, skip_special_tokens=True))
Training Details
Data
-
Источник: bstee615/bigvul (Hugging Face)
-
Подготовка:
-
берутся пары func_src_before / func_src_after (уязвимый/исправленный код);
-
длина ограничена (≤4000 символов);
-
формируется instruction в стиле:
1{
2 "messages": [
3 {
4 "role": "user",
5 "content": "Исправь этот код, устранив уязвимость. Верни только исправленный код.\n\n<уязвимый_код>"
6 },
7 {
8 "role": "assistant",
9 "content": "<безопасный_код>"
10 }
11 ]
12}
-
Размер: 2000 пар (train+val), train/test‑split 90/10 на уровне готовых примеров.
Procedure
- Base:
Qwen/Qwen2.5-Coder-1.5B-Instruct
- Adapter: DoRA через
peft.LoraConfig(use_dora=True) (если поддерживается версией PEFT)
- Оптимизируемые параметры: только LoRA/DoRA‑адаптеры (base‑веса заморожены)
- Оптимизатор: AdamW (через
transformers.Trainer)
- Precision:
bf16 на Apple MPS (Mac), float32 на CPU
- Эпохи: 2
- Batch size: 2,
gradient_accumulation_steps=4 (эффективный batch 8 примеров)
- Learning rate: 2e‑5 с
warmup_ratio=0.05, далее линейный decay
- Train runtime: ~1 час на Mac M‑серии (24 GB, MPS)
Тренинг запускался через scripts/train_qlora_secure.py из этого репозитория.
Results & Benefits
Неформальное сравнение с базовой моделью Qwen/Qwen2.5-Coder-1.5B-Instruct на
ручных промптах показывает:
-
SQL по user_id
Базовая модель уже иногда использует параметризованные запросы, но ответы
бывают размыты и не всегда подчёркивают безопасный шаблон.
Дообученная модель стабильно генерирует код вида
cursor.execute("SELECT * FROM users WHERE id = ?", (user_id,)) и даёт
более фокусированное объяснение, почему это защищает от SQL‑инъекции.
-
Определение небезопасного кода
На промптах вида
cursor.execute(f"SELECT * FROM users WHERE id = {user_id}")
адаптер точнее указывает на SQL‑инъекцию и сразу предлагает безопасный
вариант с параметрами.
-
Общие свойства
Адаптер не меняет архитектуру базовой модели и добавляет всего ~0.3%
обучаемых параметров, поэтому:
- требования к памяти и скорость инференса почти не меняются;
- увеличивается вероятность, что модель предложит безопасный паттерн
(параметризованные запросы, разделение данных и кода и т.п.)
на примерах, похожих на обучающие.
Важно: адаптер не гарантирует полную безопасность генерируемого кода. Его
следует использовать как помощника, а не как единственный источник истины,
вместе с ручным ревью, статическим/динамическим анализом и существующими
инструментами безопасности.
Limitations and Risks
- Адаптер дообучен на ограниченном числе примеров (≈2000), в основном C/C++ и SQL‑фрагменты → обобщение на другие языки и типы уязвимостей ограничено.
- Модель не гарантирует полную безопасность кода; она лишь сдвигает базовую модель в сторону более безопасных паттернов.
- Ответы могут содержать неточности, deprecated‑практики или быть неполными; их нужно перепроверять.
- Не предназначена для offensive‑security задач (поиск эксплойтов, генерация вредоносного кода).
Рекомендуется:
- использовать адаптер как помощника, а не как единственный источник истины;
- включать в пайплайн статический/динамический анализ кода и дополнительные чекеры безопасности;
- при выкладке в прод окружение проводить своё тестирование и аудит.
Acknowledgements
Model Card Authors
Model Card Contact
base_model: Qwen/Qwen2.5-Coder-1.5B-Instruct
library_name: peft
pipeline_tag: text-generation
tags:
- base_model:adapter:Qwen/Qwen2.5-Coder-1.5B-Instruct
- lora
- transformers
Model Card for Model ID
Model Details
Model Description
- Developed by: [More Information Needed]
- Funded by [optional]: [More Information Needed]
- Shared by [optional]: [More Information Needed]
- Model type: [More Information Needed]
- Language(s) (NLP): [More Information Needed]
- License: [More Information Needed]
- Finetuned from model [optional]: [More Information Needed]
Model Sources [optional]
- Repository: [More Information Needed]
- Paper [optional]: [More Information Needed]
- Demo [optional]: [More Information Needed]
Uses
Direct Use
[More Information Needed]
Downstream Use [optional]
[More Information Needed]
Out-of-Scope Use
[More Information Needed]
Bias, Risks, and Limitations
[More Information Needed]
Recommendations
Users (both direct and downstream) should be made aware of the risks, biases and limitations of the model. More information needed for further recommendations.
How to Get Started with the Model
Use the code below to get started with the model.
[More Information Needed]
Training Details
Training Data
[More Information Needed]
Training Procedure
Preprocessing [optional]
[More Information Needed]
Training Hyperparameters
- Training regime: [More Information Needed]
Speeds, Sizes, Times [optional]
[More Information Needed]
Evaluation
Testing Data, Factors & Metrics
Testing Data
[More Information Needed]
Factors
[More Information Needed]
Metrics
[More Information Needed]
Results
[More Information Needed]
Summary
Model Examination [optional]
[More Information Needed]
Environmental Impact
Carbon emissions can be estimated using the
Machine Learning Impact calculator presented in
Lacoste et al. (2019).
- Hardware Type: [More Information Needed]
- Hours used: [More Information Needed]
- Cloud Provider: [More Information Needed]
- Compute Region: [More Information Needed]
- Carbon Emitted: [More Information Needed]
Technical Specifications [optional]
Model Architecture and Objective
[More Information Needed]
Compute Infrastructure
[More Information Needed]
Hardware
[More Information Needed]
Software
[More Information Needed]
Citation [optional]
BibTeX:
[More Information Needed]
APA:
[More Information Needed]
Glossary [optional]
[More Information Needed]
More Information [optional]
[More Information Needed]
Model Card Authors [optional]
[More Information Needed]
Model Card Contact
[More Information Needed]
Framework versions