Blame view

offline_tasks/doc/快速开始.md 4.75 KB
5ab1c29c   tangwang   first commit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
  # 离线任务快速启动指南
  
  ## 一、环境准备
  
  ### 1. 安装依赖
  
  ```bash
  cd /home/tw/recommendation
  pip install -r requirements.txt
  ```
  
  ### 2. 配置数据库和Redis
  
  编辑配置文件 `offline_tasks/config/offline_config.py`,确保数据库和Redis连接信息正确:
  
  ```python
  # 数据库配置
  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:运行所有任务(推荐)
  
  ```bash
  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算法
  
  ```bash
  cd /home/tw/recommendation/offline_tasks
  python scripts/i2i_swing.py --lookback_days 730 --top_n 50 --time_decay
  ```
  
  #### 运行Session Word2Vec
  
  ```bash
  python scripts/i2i_session_w2v.py --lookback_days 730 --top_n 50 --save_model
  ```
  
  #### 运行DeepWalk
  
  ```bash
  python scripts/i2i_deepwalk.py --lookback_days 730 --top_n 50 --save_model --save_graph
  ```
  
  #### 运行兴趣点聚合
  
  ```bash
  python scripts/interest_aggregation.py --lookback_days 730 --top_n 1000
  ```
  
  ## 三、将索引加载到Redis
  
  任务运行完成后,将生成的索引加载到Redis:
  
  ```bash
  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/` 目录下:
  
  ```bash
  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/` 目录下:
  
  ```bash
  cd /home/tw/recommendation/offline_tasks/logs
  tail -f run_all_20251016.log
  ```
  
  ## 六、设置定时任务
  
  ### 使用crontab设置每天运行
  
  ```bash
  # 编辑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中添加索引加载任务:
  
  ```bash
  # 凌晨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
  ```
  
  ## 七、验证结果
  
  ### 查看文件内容
  
  ```bash
  # 查看i2i相似度
  head -n 5 output/i2i_swing_20251016.txt
  
  # 查看兴趣点聚合
  head -n 5 output/interest_aggregation_hot_20251016.txt
  ```
  
  ### 从Redis查询
  
  ```bash
  # 使用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 |
  
  实际时间会因数据量和机器配置而异。
  
  ## 十、联系与支持
  
  如有问题,请查看日志文件或联系开发团队。