MahmoudAlyosify/Horus-OSINT
GitHub: MahmoudAlyosify/Horus-OSINT
一个基于云与量化LLM的对话式OSINT智能助手,用于处理全球威胁数据并提供上下文感知的安全分析。
Stars: 0 | Forks: 0
# 🦅 CISC 886: Horus-OSINT Cloud Assistant
**Queen's University — School of Computing**
**Student NetID:** 25BBDF
## 概述
Horus-OSINT 是一个基于云的对话式聊天机器人,旨在充当开源情报(OSINT)和全球威胁分析师。它利用一个经过微调的 `Meta-Llama-3-8B-Instruct` 大语言模型(LLM),该模型在数百万条全球恐怖主义数据库(GTD)和 GDELT 记录上训练而成,并完全部署在 AWS 基础设施上。
### 系统架构
```
S3 (Raw GTD + GDELT)
│
▼
EMR Cluster [25BBDF-emr] ← PySpark preprocessing + EDA
(Status: Terminated)
│
▼
S3 (Processed JSONL — train/val/test)
│
│ ┌─────────────────────────┐
▼ │ Google Colab (T4 GPU) │
Fine-Tuning (Unsloth QLoRA). ◄──┤ fine_tuning.ipynb │
│ └─────────────────────────┘
▼
S3 (horus-llama3-osint-Q4_K_M.gguf)
│
▼
EC2 [25BBDF-ec2] — g4dn.xlarge
├── Ollama (port 11434 — internal only)
└── OpenWebUI Docker (port 8080 — public)
│
▼
User Browser → http://:8080
```
## 仓库结构
```
.
├── main.tf # Terraform — VPC, Subnet, IGW, SG, S3
├── pyspark_job.py # PySpark preprocessing pipeline (EMR)
├── fine_tuning.ipynb # Unsloth QLoRA fine-tuning notebook (Colab)
└── README.md # This file
```
## 先决条件
| 要求 | 版本/说明 |
|---|---|
| AWS 账户 | 区域:`us-east-1` |
| Terraform | >= 1.3 |
| Python | 3.10+ |
| Apache Spark | 3.x(在 EMR 上) |
| Google Colab | T4 GPU 运行时 |
| HuggingFace Token | 可访问 `meta-llama/Meta-Llama-3-8B-Instruct` |
| AWS CLI | 配置了项目凭据 |
## 逐步复制
### 第 1 步 — 基础设施供应(VPC 与网络)
```
# 克隆仓库
git clone https://github.com/MahmoudAlyosify/Horus-OSINT
cd horus-osint
# 初始化 Terraform 提供程序
terraform init
# 预览将创建的资源
terraform plan
# 应用 — 创建 VPC、子网、IGW、路由表、安全组、S3 存储桶
terraform apply -auto-approve
```
### 第 2 步 — 将原始数据上传至 S3
```
# 将合并的 GTD CSV 上传到 S3
aws s3 cp gtd_merged.csv s3://25BBDF-bucket/raw/gtd/gtd_merged.csv
# GDELT 直接从 AWS 公共数据集访问 — 无需上传:
# s3://gdelt-open-data/events/ (在 PySpark 脚本中直接读取)
```
### 第 3 步 — 在 AWS EMR 上进行数据预处理
#### 3a. 将 PySpark 脚本上传至 S3
```
aws s3 cp pyspark_job.py s3://25BBDF-bucket/scripts/pyspark_job.py
```
#### 3b. 通过 AWS 控制台启动 EMR 集群
| 设置 | 值 |
|---|---|
| 集群名称 | `25BBDF-emr` |
| EMR 发行版 | emr-7.0.0(Spark 3.5) |
| 主节点 | 1 × m5.xlarge |
| 核心节点 | 2 × m5.xlarge |
| 区域 | us-east-1 |
| VPC / 子网 | `25BBDF-vpc` / `25BBDF-public-subnet` |
| EC2 密钥对 | 您的密钥对 |
#### 3c. 添加一个步骤以运行 PySpark 作业
```
Step type : Spark application
Name : 25BBDF-preprocessing
Script : s3://25BBDF-bucket/scripts/pyspark_job.py
Arguments : --bucket 25BBDF-bucket
```
#### 3d. ⚠️ 在步骤完成后立即终止集群
```
# 验证输出文件是否已写入 S3
aws s3 ls s3://25BBDF-bucket/processed/ --recursive
```
预期输出文件:
```
processed/train.jsonl
processed/val.jsonl
processed/test.jsonl
```
### 第 4 步 — 模型微调(Google Colab)
1. 在 Google Colab 中打开 `fine_tuning.ipynb`
2. 将运行时设置为 **T4 GPU**:运行时 → 更改运行时类型 → T4 GPU
3. 在 **Colab Secrets** 中添加以下内容(🔑 图标位于左侧边栏):
- `AWS_ACCESS_KEY_ID`
- `AWS_SECRET_ACCESS_KEY`
- `HF_TOKEN`(具有 Llama-3 访问权限的 HuggingFace 令牌)
4. 按顺序运行所有单元格
5. 笔记本将:
- 从 S3 下载 `train.jsonl`
- 使用 QLoRA 微调 Llama-3-8B-Instruct
- 导出模型为 `horus-llama3-osint-Q4_K_M.gguf`
- 将 GGUF 文件上传至 `s3://25BBDF-bucket/models/`
### 第 5 步 — 启动 EC2 实例
#### 5a. 通过 AWS 控制台启动
| 设置 | 值 |
|---|---|
| 名称 | `25BBDF-ec2` |
| AMI | Ubuntu 22.04 LTS(深度学习 OSS Nvidia 驱动) |
| 实例类型 | `g4dn.xlarge`(1× NVIDIA T4,16GB 显存) |
| VPC | `25BBDF-vpc` |
| 子网 | `25BBDF-public-subnet` |
| 安全组 | `25BBDF-sg` |
| 存储 | 100 GB gp3 |
#### 5b. 通过 SSH 连接到实例
```
ssh -i "your-key.pem" ubuntu@
```
### 第 6 步 — 使用 Ollama 部署模型
在 EC2 实例上运行以下所有命令:
```
# 1. 安装 Ollama LLM 运行器
curl -fsSL https://ollama.com/install.sh | sh
# 2. 验证 Ollama 是否正在运行
ollama --version
# 3. 安装 AWS CLI(如果不存在)
sudo snap install aws-cli --classic
# 4. 从 S3 下载微调后的 GGUF 模型
aws s3 cp s3://25BBDF-bucket/models/horus-llama3-osint-Q4_K_M.gguf ./horus-llama3-osint.gguf
# 5. 创建指向 GGUF 二进制文件的 Modelfile
echo "FROM ./horus-llama3-osint.gguf" > Modelfile
# 6. 使用 Ollama 注册模型
ollama create horus-osint -f Modelfile
# 7. 交互式运行模型(用于截图)
ollama run horus-osint
```
#### 6a. 通过 curl API 调用进行测试(从第二个终端标签页)
```
curl http://localhost:11434/api/generate \
-d '{
"model": "horus-osint",
"prompt": "Identify the threat level of bombing incidents in Afghanistan in 2019.",
"stream": false
}'
```
### 第 7 步 — 使用 OpenWebUI 的 Web 界面
在 EC2 实例上运行:
```
# 1. 安装 Docker Engine
sudo apt-get update
sudo apt-get install -y docker.io
# 2. 启动 Docker 服务
sudo systemctl enable docker
sudo systemctl start docker
# 3. 部署 OpenWebUI — 端口 8080,重启后自动启动
sudo docker run -d \
-p 8080:8080 \
--add-host=host.docker.internal:host-gateway \
--restart always \
-v open-webui:/app/backend/data \
--name open-webui \
ghcr.io/open-webui/open-webui:main
# 4. 验证容器是否正在运行
sudo docker ps
```
#### 7a. 访问 Web 界面
打开浏览器并导航至:
```
http://:8080
```
从模型下拉菜单中选择 `horus-osint` 并开始对话。
### 第 8 步 — 清理(提交后)
```
# 通过控制台终止 EC2 实例,然后:
terraform destroy -auto-approve
```
## AWS 成本摘要
| 服务 | 配置 | 估算成本 |
|---|---|---|
| AWS EMR | 1× 主节点 + 2× 核心节点(m5.xlarge)· 约 4 小时 | ~$2.40 |
| AWS EC2 | 1× g4dn.xlarge · 约 72 小时(3 天开发/演示) | ~$37.87 |
| AWS S3 | 标准存储 ~15 GB | ~$0.35 |
| AWS VPC | 互联网网关 + 数据传输 | ~$2.00 |
| **总计** | | **~$42.62** |
## 超参数表
| 超参数 | 值 | 理由 |
|---|---|---|
| 学习率 | 2e-4 | 使用 AdamW 的 PEFT 标准稳定起点 |
| 批大小 | 2 | 针对 Colab T4 16GB 的内存效率优化 |
| 梯度累积 | 4 | 模拟有效批大小为 8 |
| LoRA 秩 (r) | 16 | 在显存使用与表达能力之间取得平衡 |
| LoRA Alpha | 32 | 标准缩放因子 = 2 × 秩 |
| 优化器 | adamw_8bit | 来自 Unsloth 的内存高效优化器 |
| 最大步数 | 500 | 足以适应 OSINT 格式 |
| 预热步数 | 50 | 防止训练早期不稳定 |
| 学习率调度器 | 余弦 | 训练过程中平滑衰减 |
| 最大序列长度 | 2048 | 覆盖所有 OSINT Q&A 对 |
| 导出量化 | q4_k_m | Ollama 的最佳质量/体积权衡 |
## 资源命名参考
| 资源 | 名称 |
|---|---|
| VPC | `25BBDF-vpc` |
| 互联网网关 | `25BBDF-igw` |
| 公共子网 | `25BBDF-public-subnet` |
| 路由表 | `25BBDF-rt` |
| 安全组 | `25BBDF-sg` |
| S3 存储桶 | `25BBDF-bucket` |
| EMR 集群 | `25BBDF-emr` |
| EC2 实例 | `25BBDF-ec2` |
| Ollama 模型 | `horus-osint`
标签:AI风险缓解, AWS, DLL 劫持, Docker, DPI, EC2, ECS, EMR, ESC4, Fine-Tuning, GDELT, Google Colab, GTD, IaC, LLM, LLM评估, Meta-Llama-3-8B-Instruct, Ollama, OpenWebUI, OSINT, PySpark, QLoRA, S3, T4 GPU, Terraform, Unmanaged PE, Unsloth, 云聊天机器人, 全球威胁, 关键词, 大语言模型, 威胁分析, 安全防御评估, 对话式AI, 搜索引擎优化, 漏洞利用检测, 自动化侦查工具