netgear

回刷官方固件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1. 下载固件并解压
https://www.netgear.com/support/download/

2. 路由器恢复模式
- 路由器关机
- 按住 Reset
- 开机
- 等待一二十秒,电源灯白灯闪烁

3. 上传固件
// 不同系统的命令稍有差异
$ tftp 192.168.1.1
tftp> binary
tftp> put R9000-V1.0.5.42.img

4. 等待刷新完成

openwrt

开启 Samba

1
2
3
4
5
6
# 安装依赖
opkg install shadow-common shadow-useradd

# 添加用户
useradd share
smbpasswd -a share

扩容 overlay

已验证的镜像类型

1
openwrt-...-...-generic-squashfs-combined-efi.img

扩容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 扩容镜像
dd if=/dev/zero bs=1G count=30 >> openwrt-22.03.2-x86-64-generic-squashfs-combined-efi.img
# 分区
$ parted openwrt-22.03.2-x86-64-generic-squashfs-combined-efi.img
...
(parted) print
...
Number Start End Size File system Name Flags
128 17.4kB 262kB 245kB bios_grub
1 262kB 17.0MB 16.8MB fat16 legacy_boot
2 17.0MB 126MB 109MB

(parted) resizepart 2 100%
(parted) print
...
Number Start End Size File system Name Flags
128 17.4kB 262kB 245kB bios_grub
1 262kB 17.0MB 16.8MB fat16 legacy_boot
2 17.0MB 32.3GB 32.3GB

(parted) quit

# [pve] 加载镜像为虚拟机磁盘
qm importdisk 103 openwrt-22.03.2-x86-64-generic-squashfs-combined-efi.img local-lvm

挂载新的磁盘

1
2
3
4
5
6
7
8
9
# 格式化磁盘
mkfs.ext4 /dev/sdb

# 安装 block-mount
opkg install block-mount

# 进入网页, 打开 系统 -> 挂载点
挂载点 -> 新增
保存并应用

预编译固件

  • Immortal Wrt
  • iStoreOs

配置

soft router

镜像

主题

LEDE

更新源配置

腾讯

1
2
3
4
5
6
src/gz openwrt_core https://mirrors.cloud.tencent.com/openwrt/releases/22.03.2/targets/x86/64/packages
src/gz openwrt_base https://mirrors.cloud.tencent.com/openwrt/releases/22.03.2/packages/x86_64/base
src/gz openwrt_luci https://mirrors.cloud.tencent.com/openwrt/releases/22.03.2/packages/x86_64/luci
src/gz openwrt_packages https://mirrors.cloud.tencent.com/openwrt/releases/22.03.2/packages/x86_64/packages
src/gz openwrt_routing https://mirrors.cloud.tencent.com/openwrt/releases/22.03.2/packages/x86_64/routing
src/gz openwrt_telephony https://mirrors.cloud.tencent.com/lede/snapshots/packages/x86_64/telephony

清华源

1
2
3
4
5
6
7
8
9
src/gz openwrt_core https://mirrors.cloud.tencent.com/lede/snapshots/targets/x86/64/packages
src/gz openwrt_base https://mirrors.cloud.tencent.com/lede/snapshots/packages/x86_64/base
src/gz openwrt_helloworld https://mirrors.cloud.tencent.com/lede/snapshots/packages/x86_64/helloworld
src/gz openwrt_kenzo https://mirrors.cloud.tencent.com/lede/snapshots/packages/x86_64/kenzo
src/gz openwrt_luci https://mirrors.cloud.tencent.com/lede/releases/18.06.9/packages/x86_64/luci
src/gz openwrt_packages https://mirrors.cloud.tencent.com/lede/snapshots/packages/x86_64/packages
src/gz openwrt_routing https://mirrors.cloud.tencent.com/lede/snapshots/packages/x86_64/routing
src/gz openwrt_small https://mirrors.cloud.tencent.com/lede/snapshots/packages/x86_64/small
src/gz openwrt_telephony https://mirrors.cloud.tencent.com/lede/snapshots/packages/x86_64/telephony

PVE

查看 debian 版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 1. 查看文件 release 文件
$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

# 2. 通过 lsb-release 命令
$ apt update
$ apt install lsb-release
$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 11 (bullseye)
Release: 11
Codename: bullseye

修改 debian 更新源

参考这里

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 安装依赖
apt update
apt install apt-transport-https ca-certificates -y

# 修改源文件
$ mv /etc/apt/sources.list /etc/apt/sources.list.back
$ vi /etc/apt/sources.list
## 输入如下内容 (注意版本, 下面是 bullseye)
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free

更新

1
2
apt update
apt upgrade -y

修改更新源

参考这里

proxmox 更新

1
2
3
4
# 添加源文件
vi /etc/apt/sources.list.d/pve-no-subscription.list
# 输入 (注意 debian 版本)
deb https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian bullseye pve-no-subscription

CT 模板加速

1
2
cp /usr/share/perl5/PVE/APLInfo.pm /usr/share/perl5/PVE/APLInfo.pm_back
sed -i 's|http://download.proxmox.com|https://mirrors.tuna.tsinghua.edu.cn/proxmox|g' /usr/share/perl5/PVE/APLInfo.pm

重启生效。

从 qcow2 启动 openwrt

1. 拷贝镜像至 pve

1
scp openwrt-x86-64-generic-squashfs-combined-efi.qcow2 root@192.168.6.60:

2. 创建虚拟机

不用添加硬盘盒配置 CD/DVD 驱动器。

3. 挂载镜像为磁盘

1
2
3
4
# qcow2
qm importdisk 100 openwrt-x86-64-generic-squashfs-combined-efi.qcow2 local-lvm
# img
qm importdisk 100 openwrt-x86-64-generic-squashfs-combined-efi.img local-lvm

这里的 100 是虚拟机 ID

local-lvm 是存储池名称

image-20221105161004992

4. 为虚拟机添加硬盘

image-20221105160819628

选中未使用的磁盘,并点击编辑。

image-20221105160840881

类型选择 IDE。

5. 修改引导

image-20221105161029736

image-20221105161048645

启用新添加的硬盘,并把优先级设为最高(拖动序号前的三条横杠)。

6. 启动虚拟机

保存上述更改,启动虚拟机即可。

硬盘直通

1
2
3
4
5
6
$ vi /etc/default/grub
# 修改 GRUB_CMDLINE_LINUX_DEFAULT 为如下
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"

# 更新 grub
$ update-grub

修改网络地址

1
2
3
$ vim /etc/config/network 
# 修改对应的网络接口地址, 比如 eth0
$ /etc/init.d/network restart

修改密码

1
$ passwd root

Openwrt

初始化

修改网络配置

/etc/config/network

1
2
# interface 'lan'
option ipaddr ... # 修改这里
1
2
$ service network reload
$ service network restart

修改密码

1
$ passwd root

安装应用

1
2
3
opkg install <package>
opkg install <package.ipk>
opkg install <http://path/to/package.ipk>

扩容 overlay

已验证的镜像类型

1
openwrt-...-...-generic-squashfs-combined-efi.img

扩容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 扩容镜像
dd if=/dev/zero bs=1G count=30 >> openwrt-22.03.2-x86-64-generic-squashfs-combined-efi.img
# 分区
$ parted openwrt-22.03.2-x86-64-generic-squashfs-combined-efi.img
...
(parted) print
...
Number Start End Size File system Name Flags
128 17.4kB 262kB 245kB bios_grub
1 262kB 17.0MB 16.8MB fat16 legacy_boot
2 17.0MB 126MB 109MB

(parted) resizepart 2 100%
(parted) print
...
Number Start End Size File system Name Flags
128 17.4kB 262kB 245kB bios_grub
1 262kB 17.0MB 16.8MB fat16 legacy_boot
2 17.0MB 32.3GB 32.3GB

(parted) quit

# [pve] 加载镜像为虚拟机磁盘
qm importdisk 103 openwrt-22.03.2-x86-64-generic-squashfs-combined-efi.img local-lvm

旁路由

  • 网络 / 接口 / LAN
    • 基本设置
      • ipv4 地址,修改为主路由局域网合法且未被占用地址(如 192.168.6.2~192.168.6.254)
      • 网关,主路由 ip 地址(如 192.168.6.1)
      • 广播地址,如 192.168.6.255
      • DNS 服务器,主路由 ip 地址
      • IPv6 分配长度,已禁用
    • 高级设置
      • 使用内置的 ipv6 管理,关闭
    • 物理设置
      • 关闭桥接
    • DHCP 服务器
      • 忽略此接口
  • 网络 / 防火墙
    • image-20231026230034381
  • 运行 SSR

设备设置

Mac OS

image-20231026230223222

Ubuntu Server

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ cat /etc/netplan/00-installer-config.yaml
# This is the network config written by 'subiquity'
network:
ethernets:
enp5s0:
dhcp4: false
addresses: [192.168.6.55/24]
match:
macaddress: 2a:04:a0:xx:xx:xx
wakeonlan: true
nameservers:
addresses: [223.6.6.6, 8.8.8.8]
routes:
- to: default
via: 192.168.6.89
metric: 40
enp6s0:
dhcp4: true
version: 2

连通性校验

  • ping 使用 ICMP 协议,代理一般只支持 TCP 和 UDP,所以使用 ping 可能无法判断是否代理成功
1
2
# 可以尝试下面命令
curl https://www.google.com

自定义规则

image-20240519224634959

emacs

使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
注:
C-<chr>: ctrl+字母
M-<car>: alt+字母

命令:
C-x C-c:退出Emacs
C-v:下一屏(页)
M-v:上一屏(页)
C-l:重绘屏幕,并将光标所在行置于屏幕中央
C-p:[移动光标]将光标移动到上一行,列位置不变(p:previous)
C-n:[移动光标]将光标移动到下一行,列位置不变(n:next)
C-b:[移动光标]将光标向左移动一位(b:backward)
C-f:[移动光标]将光标向右移动一位(f:forward)

文件命令:
C-x C-f:打开文件
C-x C-s:保存文件
C-x C-b:列出缓冲区

C-x u:撤销

fswatch

参数

1
fswatch -e ".*" -i '.*\.md$' . | xargs -I {} echo {}

注意

  • 默认包含所有文件,如果只配置 -i 是没有任何效果的,必须配合 -e ,比如 -e '.*' 屏蔽所有,在 -i '.*md$' 包含 md 结尾文件
1
fswatch -e ".*" -i '.*\.md$'  . | xargs -I {} mmdc -e png -i {}

helm

安装

1
2
3
4
5
6
7
8
9
10
11
12
13
# brew
brew install helm

# snap
sudo snap install helm --classic

# microk8s
microk8s enable helm3
## 使用
microk8s helm3 ...

# arch
sudo pamac install helm

概念

Helm 可以安装 Charts 到 k8s 集群中,为每次安装创建新的 Release。为了获取新的 Charts,可以搜索 Helm Charts Repositories。

Chart

在 Helm 中,Chart 是一个集合,包含所有必要的的资源定义来运行一个应用、工具或者 k8s 集群中的服务。

Repository

Repository 是 Charts 收集和分享的地方。

Release

Release 是 Chart 运行在 k8s 集群中的实例。一个 Chart 可以在相同的集群被安装多次,每次安装都会创建一个新的 Release。

使用

Repo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 添加
helm repo add <name> <url>

# 查看 repo 下的 charts
helm search repo <repo-name>

# 更新 repo
helm repo update <repo-name>

# 列出添加的 repo
helm repo list

# 移除 repo
helm repo remove <repo-name>

# 打包 repo
helm package <relative-path-to-chart>

# 生成 index
helm repo index

Chart

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 搜索
helm search repo <repo-name> # 在添加的 repo 中搜索
helm search hub <repo-name> # 在 hub 中搜索

# 安装一个 Chart
helm install <chart> --generate-name
helm install <release-name> <chart>

# 列出安装的 chart
helm list # 或 helm ls

# 写在一个 chart
helm uninstall <release-name>

# 查看一个 helm 的状态
helm status <release-name>

Values

1
2
3
4
5
6
7
8
9
10
# 查看 chart values
helm show values bitnami/wordpress
# 查看 release values
helm show values <release-name>

# 覆盖 values (使用文件)
echo '{mariadb.auth.database: user0db, mariadb.auth.username: user0}' > values.yaml
helm install -f values.yaml bitnami/wordpress --generate-name
# 覆盖 values (使用命令行参数)
helm install --set mariadb.auth.database=user0db,sample.list={1,2,3},sample.empty.list=[] bitnami/wordpress --generate-name

升级与回滚

升级

1
2
3
4
5
echo "mariadb.auth.username: user1" > panda.yaml
helm upgrade -f panda.yaml <release-name> <chart>

# 示例
helm upgrade -f panda.yaml happy-panda bitnami/wordpress

回滚

1
2
3
4
helm rollback <release-name> <REVISION> --timeout <timeout> --wait

# 查看 revision
helm history <release-name>

模板

1
2
# 查看生成 Manifest
helm template --debug <relative-path-to-chart>

ArtifactHUB

helm artifact hub

自定义 Repo

示例参考 bitnami

推荐系统

概念

特征

特征类型

  • Sparse

    • Sparse Id
    • Sparse Real
      • 相对与 Sparse Id 特征,有权重 / 频次信息
  • Dense

  • 序列特征

模型

模型 时间 类型 说明
LR ~1990s 线性 逻辑回归模型
FFM 2014 线性 Field-aware Factorization Machine,考虑字段交叉;适合稀疏特征场景
PNN 2016 DNN + 内积 Product-based NN,引入特征内积作为输入结构
Wide & Deep 2016 混合 Google Wide & Deep 结构,线性部分负责记忆,DNN 负责泛化
DeepFM 2017 混合 经典 Wide & Deep 架构,FM 部分显式建模交叉,DNN 学习非线性组合
DCN 2017 显式交叉 Deep & Cross Network,引入 Cross Layer 显式建模高阶交叉
FWFM 2018 线性 + 权重 Field-weighted FM,FFM 的进化版,引入不同字段间权重
xDeepFM 2018 混合 引入 CIN 层(压缩交叉网络),兼顾显式/隐式交叉
DIN 2018 序列建模 Deep Interest Network,加入用户历史行为对当前点击的注意力机制
MMOE 2018 多任务 Multi-gate Mixture-of-Experts,用于多目标CTR/CVR建模
ESMM 2018 多任务归一化 用于 CTR + CVR 等场景,解决 CVR 标签稀疏问题
DIEN 2019 序列建模 DIN 的升级版,加入 GRU 进行兴趣建模和演化建模
AutoInt 2019 自注意力结构 自动建模特征交叉,基于 multi-head self-attention
BST 2019 树 + DNN Behavior Sequence Transformer,序列建模与 Transformer 融合
AFN 2019 非线性建模 Adaptive Factorization Network,采用 log-bilinear 函数建模特征组合
FiBiNet 2019 动态建模 Feature Importance and Bilinear Feature Interaction,建模特征重要性
PLE 2020 多任务 Progressive Layered Extraction,多任务建模效果更好
DCN-Mix 2021 显式交叉 DCN v2 加强版,融合多个 Cross Network 和 Expert 路径
StarNN 2023 Transformer 阿里提出的新一代 CTR Transformer 模型,高效建模稀疏序列
RetentiveNet 2023 新结构 Meta 提出,结合注意力与遗忘机制,适合序列长程建模

上面除了 LR、FFM、FWFM 均为 NN 模型。

分类

  • 线性模型
  • 浅层交叉模型
  • 深度神经网络(DNN)模型
  • 序列建模模型(基于行为序列建模)
  • 树模型
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
推荐模型
├── 一、线性类(无神经网络)
│ ├── FFM - Field-aware Factorization Machine(2014)
│ └── FWFM - Field-weighted FM(2018)

├── 二、混合类(线性 + NN)
│ ├── Wide & Deep - Wide(记忆)+ Deep(泛化)(2016)
│ ├── DeepFM - FM + DNN(2017)
│ ├── xDeepFM - CIN(显式交叉)+ DNN(2018)
│ └── DCN - Cross Network + DNN(2017)
│ └── DCN-Mix - 多 Cross Network 路径(2021)

├── 三、序列建模类(兴趣建模)
│ ├── DIN - Attention over behavior(2018)
│ ├── DIEN - DIN + GRU + Interest Evolve(2019)
│ └── BST - Transformer 架构 + 序列建模(2019)

├── 四、注意力机制类(自注意力 / 注意力增强)
│ ├── AutoInt - Multi-Head Self-Attention + DNN(2019)
│ ├── AFN - 自适应 log-bilinear 特征组合(2019)
│ └── FiBiNet - SENet + Bilinear interaction(2019)

├── 五、多任务建模类
│ ├── MMOE - 多专家门控结构(2018)
│ ├── PLE - 多层渐进专家结构(2020)
│ └── ESMM - CVR 归一化建模结构(2018)

└── 六、下一代结构(Transformer/轻结构)
├── StarNN - 高效稀疏序列 Transformer(2023, 阿里)
└── RetentiveNet - Meta 提出,Transformer 替代结构(2023)

系列文章

推荐系统

推荐系统的典型架构

recommend-system-第 2 页.drawio

如何快速了解一个推荐系统

  • 架构
    • 在线架构,流量接入、策略、在线打分
    • 离线架构,样本日志的产生、收集、清洗、拼接,模型训练平台
  • 数据
    • 用户数据,了解时效性、数据量、存储方式
      • 累计用户画像
      • 实时用户行为数据
    • 正排数据
      • 信息流,视频、文章、图片等
      • 广告,Offer、模板、素材等
  • 代码组织
    • 代码使用到的框架
    • 处理流程
  • 策略
    • 对指标(信息流,点击率预估、停留时长预估,广告,IVR、CTR、CVR、eCPM 等)的调整
  • 特征
    • 特征来源
    • 如何做特征抽取(FE,Feature Extractor)
    • 落特征、特征回流

k9s usage

常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 输入冒号进入命令模式
:

# 切换视图
:svc # 服务视图
:deploy # 部署视图
:pod # pod 视图
:rb # 角色绑定视图
:namespace # 命名空间视图
:cj # cronjob

# 退出
^+C (CTRL + C)
:q