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, 搜索引擎优化, 漏洞利用检测, 自动化侦查工具