QUICKSTART.md 4.75 KB

离线任务快速启动指南

一、环境准备

1. 安装依赖

cd /home/tw/recommendation
pip install -r requirements.txt

2. 配置数据库和Redis

编辑配置文件 offline_tasks/config/offline_config.py,确保数据库和Redis连接信息正确:

# 数据库配置
DB_CONFIG = {
    'host': 'your_db_host',
    'port': '9030',
    'database': 'datacenter',
    'username': 'readonly',
    'password': 'your_password'
}

# Redis配置
REDIS_CONFIG = {
    'host': 'your_redis_host',
    'port': 6379,
    'db': 0,
    'password': None
}

二、运行离线任务

方式1:运行所有任务(推荐)

cd /home/tw/recommendation/offline_tasks
python run_all.py --lookback_days 730 --top_n 50

这将依次运行:

  1. Swing算法(i2i相似度)
  2. Session Word2Vec(i2i相似度)
  3. DeepWalk算法(i2i相似度)
  4. 兴趣点聚合(多维度商品索引)

方式2:运行单个任务

运行Swing算法

cd /home/tw/recommendation/offline_tasks
python scripts/i2i_swing.py --lookback_days 730 --top_n 50 --time_decay

运行Session Word2Vec

python scripts/i2i_session_w2v.py --lookback_days 730 --top_n 50 --save_model

运行DeepWalk

python scripts/i2i_deepwalk.py --lookback_days 730 --top_n 50 --save_model --save_graph

运行兴趣点聚合

python scripts/interest_aggregation.py --lookback_days 730 --top_n 1000

三、将索引加载到Redis

任务运行完成后,将生成的索引加载到Redis:

cd /home/tw/recommendation/offline_tasks
python scripts/load_index_to_redis.py --redis-host localhost --redis-port 6379 --expire-days 7

参数说明:

  • --redis-host: Redis服务器地址
  • --redis-port: Redis端口
  • --redis-db: Redis数据库编号(默认0)
  • --expire-days: 索引过期天数(默认7天)

四、查看输出结果

所有输出文件都在 offline_tasks/output/ 目录下:

cd /home/tw/recommendation/offline_tasks/output
ls -lh

输出文件示例:

i2i_swing_20251016.txt
i2i_session_w2v_20251016.txt
i2i_deepwalk_20251016.txt
interest_aggregation_hot_20251016.txt
interest_aggregation_cart_20251016.txt
interest_aggregation_new_20251016.txt
interest_aggregation_global_20251016.txt

五、查看日志

所有运行日志都在 offline_tasks/logs/ 目录下:

cd /home/tw/recommendation/offline_tasks/logs
tail -f run_all_20251016.log

六、设置定时任务

使用crontab设置每天运行

# 编辑crontab
crontab -e

# 添加以下行(每天凌晨2点运行)
0 2 * * * cd /home/tw/recommendation/offline_tasks && /usr/bin/python3 run_all.py --lookback_days 730 --top_n 50 >> /home/tw/recommendation/offline_tasks/logs/cron.log 2>&1

运行后自动加载到Redis

可以在crontab中添加索引加载任务:

# 凌晨6点加载索引到Redis(假设离线任务在4小时内完成)
0 6 * * * cd /home/tw/recommendation/offline_tasks && /usr/bin/python3 scripts/load_index_to_redis.py >> /home/tw/recommendation/offline_tasks/logs/load_redis.log 2>&1

七、验证结果

查看文件内容

# 查看i2i相似度
head -n 5 output/i2i_swing_20251016.txt

# 查看兴趣点聚合
head -n 5 output/interest_aggregation_hot_20251016.txt

从Redis查询

# 使用redis-cli
redis-cli

# 查看i2i相似度
GET i2i:swing:123456

# 查看兴趣点索引
GET interest:hot:platform:PC
GET interest:global:country:US

八、常见问题

Q1: 任务运行时间太长怎么办?

A: 可以尝试:

  1. 减少 --lookback_days 参数(如改为365天)
  2. 减少 --top_n 参数(如改为20)
  3. 在更强大的机器上运行
  4. 考虑分布式运行不同算法

Q2: 内存不足怎么办?

A:

  1. Swing算法特别消耗内存,可以先跳过:python run_all.py --skip-i2i
  2. 只运行DeepWalk或Session W2V
  3. 对数据进行采样

Q3: 数据库连接超时怎么办?

A:

  1. 检查数据库配置是否正确
  2. 检查网络连接
  3. 增加SQL查询的超时时间
  4. 分批查询数据

Q4: 如何只更新特定维度的索引?

A: 修改 interest_aggregation.py 脚本,注释掉不需要的维度计算代码。

九、性能参考

在标准配置(730天数据,top_n=50)下的预估运行时间:

任务 数据量 预估时间 内存占用
Swing 100万条行为 2-4小时 4-8GB
Session W2V 100万条行为 30-60分钟 2-4GB
DeepWalk 100万条行为 1-2小时 2-4GB
兴趣点聚合 100万条行为 30-60分钟 2-4GB

实际时间会因数据量和机器配置而异。

十、联系与支持

如有问题,请查看日志文件或联系开发团队。