Skip to main content

kubernetes

· 9 min read
Spark light
Spark light
Left

名称规划

  • 想好 ClusterName: 比如:prod,prod1,dev,p,d,....
  • apiserver的ha domain: k8s<ClusterName>ce k8sprod1ce
  • 规划好这个domain的static ip
  • ctrlNode(cNode)的hostname: k8s<ClusterName>c<number> k8sprod1c1 k8sprod1c2 k8sprod1c3
  • workNode(wNode)的hostname: k8s<ClusterName>w<letter> k8sprod1wa k8sprod1wb k8sprod1wc
  • k8s会使用机器的hostname作为节点名

搭建步骤。

  • 在域名系统映射好apiserver的ha domain的固定静态ip
  • cNode1搭建:k8s_init_controlnode k8sprod1ce k8sprod1c1
    • 搭建首个k8s control节点,开发环境可以只有一个cNode
    • k8s_init_controlnode会解析出k8sprod1ce的static ip,设置好hostname,并搭建haproxy和keepalived
    • 然后会用kubeadm init进行cluster的首次初始化
    • 自动echodo kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
    • 会生成~/join.txt保存下其他node(cNode or wNode)的join命令
    • 运行完以后可以执行reload命令,shell会自动更新环境信息确保cmd下kubectl可用
    • kubectl get nodes确保 首个node is Ready
  • cNode2,3搭建:k8s_init_controlnode k8sprod1ce k8sprod1c2
    • dev环境可以不用cNode2,3
    • 这个只会准备hostname,haproxy和keepalived
    • 然后找到初始节点的~/join.txt中的cNode join命令粘贴执行
  • wNode join
    • 先sethostname正确配置好hostname
    • 粘贴wNode的join命令加入

注意事项

remember word

  • taint cordon/uncordon

containerd arch layout

kubernetes port useage

portmoduledesc
10250kubeletkubelet api
10248kubelethealth check:healthz
10255kubeletkubelet readonly info api,can use without auth
4194cAdvisor

kubernetes extends

kubernetes system oper

  • check ## memory section in NotesLinux.md

  • container images list: kubectl get nodes -o jsonpath='{range .items[\*]}{.metadata.name}{"\n"}{range .status.images[\*]}{"\t"}{.names[\0]}{"\n"}{end}{end}'

  • check system memory: cat /proc/meminfo | grep '^(MemFree:|Cached:|Shmem:|Buffers:|SReclaimable|Slab:)'

  • root cgroup check: cat /sys/fs/cgroup/memory.stat| grep '^(cache |rss |inactive_file |active_file |SReclaimable|Slab:)'

  • cgroup memory check

  • alias cgcheck='function cgcheck_fn() (cd /sys/fs/cgroup/$(cat /proc/$(pgrep ${1})/cgroup | sed "s@^[^/]*/@@") && echo pid:$(pgrep ${1}) && pwd && echo "can:cat memory.stat,exit,ls,..." && bash ); cgcheck_fn'

  • cgcreate and use by docker

  • cgcreate -g memory:test-docker-memory

  • docker run --cgroup-parent=/test-docker-memory --net=none -v /root/test_mem:/test -idt --name test --privileged csighub.tencentyun.com/admin/tlinux2.2-bridge-tcloud-underlay:latest

  • systemd sysemd

    • systemctl == systemctl list-units
    • systemctl -t slice
    • systemctl -t service,masked
    • systemctl list-unit-files
    • systemd-cgls
    • systemd-cgtop
  • control-plane-node-communication

    • kubeadm缺省安装的已经设置好了 kubelet_node 通过证书信任 apiserver的client, 也就是这个文档中所的需要配置的地方 #只是新版本部署的anonymous-auth=false,client-ca-file这些配置都按照推荐都放到/var/lib/kubelet/config.yaml文件中了
    • 如下配置让apiserver通过证书信任kubelet节点
    • 生成统一的/etc/kubernetes/pki/kubelet-ca.{crt,key}
    • apiserver --kubelet-certificate-authority /etc/kubernetes/pki/kubelet-ca.crt #
    • 所有的node上的原有的selfsign(/var/lib/kubelet/pki/kubelet.{crt,key})替换为由 /etc/kubernetes/pki/kubelet-ca.{crt,key}签发的新crt,key
  • memory free > echo 3 > /proc/sys/vm/drop_caches && swapoff -a && swapon -a && printf ‘\n%s\n’ ‘Ram-cache and Swap Cleared’

certificate how to

kubeadm certs check-expiration
kubeadm certs renew all
#verify cert chain
openssl verify -CAfile /etc/kubernetes/pki/etcd/{ca.crt,ca.crt,healthcheck-client.crt,peer.crt,server.crt} #etcd-ca
openssl verify -CAfile /etc/kubernetes/pki/{front-proxy-ca.crt,front-proxy-ca.crt,front-proxy-client.crt} #front-proxy-ca
openssl verify -CAfile /etc/kubernetes/pki/{ca.crt,ca.crt,apiserver.crt,apiserver-kubelet-client.crt}
openssl verify -CAfile /var/lib/kubelet/pki/kubelet.crt{,}

control pane certiciate(ca.{crt,key} etcd-ca.{crt,key} front-proxy-ca.{crt,key} sa.key sa.pub)

  • upload to kube secret "kubeadm-certs"
  • upload is temp, will expire in 2 hour. this is use for add more control pane
  • kubeadm init phase upload-certs --upload-certs --certificate-key $(kubeadm certs certificate-key)
  • kubeadm init phase upload-certs --upload-certs #Upload control plane certificates to the kubeadm-certs Secret, and print out certificate-key
  • --certificate-key #define key by user option the encrypt key for uploaded cert. if not define. will auto generate new one and print out
  • can check it by: kubectl -n kube-system get secret kubeadm-certs -o yaml

#regenerate apiserver.crt with new certSANs item

#mv /etc/kubernetes/pki/apiserver.{crt,key} /tmp/
kubeadm init phase certs apiserver #this ok for most case
kubeadm init phase certs apiserver --config <(kubectl -n kube-system get configmap kubeadm-config -o jsonpath='{.data.ClusterConfiguration}'| sed 's@^apiServer:@&\n certSANs:\n - "ctrlpe.local"@')

#check certSAN for apiserver.crt openssl x509 -in=/etc/kubernetes/pki/apiserver.crt -text | grep -A 1 "Subject Alternative Name"

kube-apiserver url acess kubelet
  * kube-apiserver --kubelet-client-certificate=/etc/kubernetes/pki/apiserver-kubelet-client.crt --kubelet-client-key=/etc/kubernetes/pki/apiserver-kubelet-client.key
* --kubelet-certificate-authority=
* why kubelet serve cert need a certSANs(host list)
openssl x509 -req -days 365 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem
echo subjectAltName = IP:worker_node_ip >? hostSANs_file.cnf
openssl x509 -req -days 365 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile hostSANs_file.cnf

kubernetes debug utils

* journalctl -xe --unit kubelet
* kubectl describe nodes
* kubectl get nodes
* kubectl -n kube-public get cm cluster-info -o yaml
* kubectl -n kube-system get cm kubeadm-config -o yaml
* kubectl cluster-info dump
* find ip define in kubernetes> grep -r '\.[0-9]\{1,3\}\/[0-9]\{1,2\}' /var/lib/kubelet/ /etc/kubernetes/
kubectl logs podName | tail -f /var/log/pods/kube-system_coredns-5dd5756b68-5wp4j_456bf805-a764-4874-b168-3c832d21241b/coredns/161.log

install k8s deps

 * systemd service file ref: github:kubespray: *.service.j2
* let control-pane can get pod task(action like work pane): kubectl taint nodes nodeName1 node-role.kubernetes.io/control-plane:NoSchedule-

install k8s

install k8s network plan

* pod ip range need be diff form service ip range
* --pod-network-cidr @ kubeadm init --help
* podSubnet @/etc/kubernetes/kubeadm-config.yaml
* cluster-cidr: @/etc/kubernetes/kubeadm-config.yaml
* clusterCIDR @/etc/kubernetes/kubeadm-config.yaml
* --service-cidr @ kubeadm init --help #(default "10.96.0.0/12")
* serviceSubnet @/etc/kubernetes/kubeadm-config.yaml
* serviceSubnet @kubectl -n kube-system get cm kubeadm-config -o yaml
* --service-cluster-ip-range @/etc/kubernetes/manifests/kube-apiserver.yaml
mkdir -p -m 755 /etc/apt/keyrings
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
systemctl stop kubelet

config file list(ls /var/lib/kubelet/ /etc/kubernetes/manifests/ /etc/kubernetes /etc/cni/net.d/)

/etc/kubernetes:
admin.conf calico-crb.yml controller-manager.conf kubeadm-config.yaml manifests
calico-ipamconfig.yml kubeadm-images.yaml kubelet.env node-crb.yml ssl
calico-config.yml calico-node-sa.yml k8s-cluster-critical-pc.yml kubelet-config.yaml kubernetes-services-endpoint.yml pki tmp
calico-cr.yml calico-node.yml kdd-crds.yml kubelet.conf kubescheduler-config.yaml scheduler.conf

/etc/kubernetes/manifests/:
etcd.yaml kube-apiserver.yaml kube-controller-manager.yaml kube-scheduler.yaml

/var/lib/kubelet/:
config.yaml cpu_manager_state device-plugins kubeadm-flags.env memory_manager_state pki plugins plugins_registry pod-resources pods

/etc/cni/net.d/:
10-calico.conflist calico-kubeconfig calico.conflist.template nerdctl-bridge.conflist nerdctl-dkfile_default.conflist nerdctl-prometheus-pushgateway_default.conflist nerdctl-rtorrent_default.conflist
cat /etc/cni/net.d/10-containerd-net.conflist
{
"cniVersion": "1.0.0",
"name": "containerd-net",
"plugins": [
{
"type": "bridge",
"bridge": "cni0",
"isGateway": true,
"ipMasq": true,
"promiscMode": true,
"ipam": {
"type": "host-local",
"ranges": [
[{
"subnet": "10.244.0.0/16"
}],
[{
"subnet": "2001:4860:4860::/64"
}]
],
"routes": [
{ "dst": "0.0.0.0/0" },
{ "dst": "::/0" }
]
}
},
{
"type": "portmap",
"capabilities": {"portMappings": true}
}
]
}
  • grep -r 'kind: .' /etc/kubernetes/ | sort | uniq
/etc/kubernetes/admin.conf:kind: Config
/etc/kubernetes/calico-config.yml:kind: ConfigMap
/etc/kubernetes/calico-cr.yml:kind: ClusterRole
/etc/kubernetes/calico-crb.yml: kind: ClusterRole
/etc/kubernetes/calico-crb.yml:- kind: ServiceAccount
/etc/kubernetes/calico-crb.yml:kind: ClusterRoleBinding
/etc/kubernetes/calico-ipamconfig.yml:kind: IPAMConfig
/etc/kubernetes/calico-node-sa.yml:kind: ServiceAccount
/etc/kubernetes/calico-node.yml:kind: DaemonSet
/etc/kubernetes/controller-manager.conf:kind: Config
/etc/kubernetes/k8s-cluster-critical-pc.yml:kind: PriorityClass
/etc/kubernetes/kdd-crds.yml: kind: ""
/etc/kubernetes/kdd-crds.yml: kind: BGPConfiguration
/etc/kubernetes/kdd-crds.yml: kind: BGPPeer
/etc/kubernetes/kdd-crds.yml: kind: BlockAffinity
/etc/kubernetes/kdd-crds.yml: kind: CalicoNodeStatus
/etc/kubernetes/kdd-crds.yml: kind: ClusterInformation
/etc/kubernetes/kdd-crds.yml: kind: FelixConfiguration
/etc/kubernetes/kdd-crds.yml: kind: GlobalNetworkPolicy
/etc/kubernetes/kdd-crds.yml: kind: GlobalNetworkSet
/etc/kubernetes/kdd-crds.yml: kind: HostEndpoint
/etc/kubernetes/kdd-crds.yml: kind: IPAMBlock
/etc/kubernetes/kdd-crds.yml: kind: IPAMConfig
/etc/kubernetes/kdd-crds.yml: kind: IPAMHandle
/etc/kubernetes/kdd-crds.yml: kind: IPPool
/etc/kubernetes/kdd-crds.yml: kind: IPReservation
/etc/kubernetes/kdd-crds.yml: kind: KubeControllersConfiguration
/etc/kubernetes/kdd-crds.yml: kind: NetworkPolicy
/etc/kubernetes/kdd-crds.yml: kind: NetworkSet
/etc/kubernetes/kdd-crds.yml:kind: CustomResourceDefinition
/etc/kubernetes/kubeadm-config.yaml:kind: ClusterConfiguration
/etc/kubernetes/kubeadm-config.yaml:kind: InitConfiguration
/etc/kubernetes/kubeadm-config.yaml:kind: KubeProxyConfiguration
/etc/kubernetes/kubeadm-config.yaml:kind: KubeletConfiguration
/etc/kubernetes/kubeadm-images.yaml:kind: ClusterConfiguration
/etc/kubernetes/kubeadm-images.yaml:kind: InitConfiguration
/etc/kubernetes/kubelet-config.yaml:kind: KubeletConfiguration
/etc/kubernetes/kubelet.conf:kind: Config
/etc/kubernetes/kubernetes-services-endpoint.yml:kind: ConfigMap
/etc/kubernetes/kubescheduler-config.yaml:kind: KubeSchedulerConfiguration
/etc/kubernetes/manifests/etcd.yaml:kind: Pod
/etc/kubernetes/manifests/kube-apiserver.yaml:kind: Pod
/etc/kubernetes/manifests/kube-controller-manager.yaml:kind: Pod
/etc/kubernetes/manifests/kube-scheduler.yaml:kind: Pod
/etc/kubernetes/node-crb.yml: kind: ClusterRole
/etc/kubernetes/node-crb.yml: kind: Group
/etc/kubernetes/node-crb.yml:kind: ClusterRoleBinding
/etc/kubernetes/scheduler.conf:kind: Config
  • kubectl get cm -n kube-system
coredns
extension-apiserver-authentication
kube-apiserver-legacy-service-account-token-tracking
kube-proxy #KubeProxyConfiguration
kube-root-ca.crt
kubeadm-config #ClusterConfiguration
kubelet-config #KubeletConfiguration

kubectl

  • kubectl [get|describe|edit|set resources] (pods,rc,services,cm,deployments,rs,runtimeclass|lease) -A

kubelet___reconfig__

  • to learn more
  • kubectl edit cm -n kube-system kubelet-config
  • /var/lib/kubelet/config.yaml
  • systemctl restart kubelet

k8s usage

kubectl apply -f https://kubernetes.io/examples/controllers/frontend.yaml kubectl apply -f https://k8s.io/examples/admin/dns/dnsutils.yaml kubectl apply -f https://kubernetes.io/examples/pods/pod-rs.yaml kubectl apply -f https://k8s.io/examples/controllers/nginx-deployment.yaml

k8s config detail

  • kubeadm config(k8s_init_cfg&k8s_cluster_cfg helper)

    • kubeadm config images list(use k8s_init_cfg gen k8s_cluster_cfg and get docker images(need use) list print out)
    • kubeadm config images pull
    • kubeadm config print [init-defefault|join-defaults|reset-default]
  • kubeadm kubeconfig(kube_access_cfg helper)

  • kube_access_cfg(--kubeconfig): include info(CACert,APIServer,ClientName,TokenAuth,ClientCertAuth)

    • load kube_access_cfg: kubeadm&kubectl default load it from: ~/.kube/config or /etc/kubernetes/admin.conf
    • save kube_access_cfg when boot init: kubeadm init will generate /etc/kubernetes/admin.conf at 'phase kubeconfig', reference kubeadm init -h
    • send&cp /etc/kubernetes/admin.conf to some user's ~/.kube/config, will give full acesss the k8s cluster to this user
    • generate kube_access_cfg(with limit acesss& validity-perio) print to stdout by cmd: kubeadm kubeconfig user [--config k8s_cluster_cfg.yml]
    • (kubeadm config|kubeadm upgrade|...) can use --kubeconfig kube_access_cfg.yml option to load kube_access_cfg
  • k8s_init_cfg(--config):

    • show default k8s_init_cfg: kubeadm config print init-defaults
    • save default k8s_init_cfg: kubeadm config print init-defaults > k8s_init_cfg.yml
    • on other machine k8s init by: kubeadm init --config k8s_init_cfg.yml
    • 'kubeadm init' == 'kubeadm init --config <(kubeadm config print init-defaults)', but you can edit output of 'kubeadm config print init-defaults' for custom init
  • k8s_cluster_cfg:

    • show current k8s_cluster_cfg: kubectl describe -n kube-system cm kubeadm-config
  • kubelet config:

    • [kubeadm init|join|upgrade] will write KubeletConfiguration to file /var/lib/kubelet/config.yaml and passing it to the local node kubelet #ref
    • kubelet all node update: ref: Update the cgroup driver on all nodes
    • kubectl drain [node-name] --ignore-daemonsets
    • kubectl uncordon [node-name]

route_command

· 2 min read
Spark light
Spark light
Left

important

all

debian(linux)

ip route add 0/0 via 192.168.1.1
route add 10.2.100.0 mask 255.255.255.0 192.168.2.230
#/usr/sbin/ip -6 addr add '2402:4e00:1701:ea00:0:98f9:46b2:d3d3/64' dev eth0
#/usr/sbin/ip -6 route add default via 2402:4e00:1701:ea00::0 dev eth0

busybox(openwrt, alpine)

  • openwrt: iproute == ip route
iproute del local $IPV6ADDR  dev eth0
iproute add local $IPV6ADDR dev eth0
route add -net 10.0.0.0/8 dev eth0.2 gw 192.168.2.6
route del default
route delete -net 45.78.6.36 netmask 255.255.255.255
route add default gw 192.168.1.1
route add default gw 192.168.1.1 dev br-lan
route add default dev wireguard

macosx

  • show netstat -nr
-n:(show ip or show name)
sudo route -n delete -net 0.0.0.0
sudo route -n add -net 0.0.0.0 192.168.1.1
sudo route -n add -net 0.0.0.0 192.168.123.198
sudo route -n add -net 10.2.100.0 192.168.2.230 255.255.255.0
sudo route -n delete -net 10.2.100.0

win

ipconfig /flushdns

others

ifconfig eth0 192.168.1.67/24
echo "nameserver 61.139.2.69" > /etc/resolv.conf

telecom

· 3 min read
Spark light
Spark light
Left

telecom (abbreviation/ acronym/ initialism )

  • RAN: Radio Access Network
  • UE:User Equipment //mobile phone
  • Node B:Radio base station
  • gNB:(Next Generation NodeB) //5g Base Station
  • eNB: //Base Station
  • NR: New Radio //5G radio interface between UE&gNB
  • 5GCN:5G core network
  • EPC:Evolved Packet Core //4G LTE core network
  • UPF - User Plane Function
  • GTP(GPRS Tunnelling Protocol) //https://github.com/free5gc/gtp5g
  • AMF:Access and Mobility Management
  • 3GPP:the Third-Generation Partnership Project //telecom stardard orgnazation
  • PLMN Identity(Mobile Country Code (MCC), Mobile Network Code (MNC) and a cell ID)
  • mobile identity (IMSI)

telcom abbrev map

GenerationRadio TechnologyBase Station Name
2GGSMBTS (Base Transceiver Station)
3GUMTSNodeB
4GLTEeNB, Evolved NodeB
5GNR:New RadiogNB, Next Generation NodeB

aritech view

Spectrum usage & feature

  • ref http://anisimoff.org/eng/5g/5g_overview.html
  • Low-frequency bands < 3GHz 带宽低于20MHz, 长距离覆盖,稳定,低带宽
  • Medium-frequency bands (3-6Ghz)cmW 厘米波 用多天线传输提高覆盖面 高带宽200MHz 5G的主要使用频段
  • high-frequency bands,(6-24Ghz) mmW 毫米波,也是wifi使用的波段,5G也开始使用
  • Massive MIMO and Beamforming()
  • Diversity(frequency diversity) 单天线对,多频同传,不是所有频段都受到干扰,提高传输成功率 //Frequency diversity employs a single transmit/receive antenna pair, but operating at two or more widely spaced carrier frequencies.
  • Spatial Multiplexing 空间复用, 多数据流复用同一通道
  • Directivity (beamforming) 方向性波束,多天线服务不同方向互补干扰,提高覆盖率和抗干扰能力
  • SIM aes128 MILENAGE

Secret & Auth

opensource

math words

· One min read
Spark light
Spark light
Left

Mean and average

The mean most commonly refers to the arithmetic mean, but may refer to some other form of mean, such as harmonic or geometric (see the Wikipedia article). Thus, when used without qualification, I think most people would assume that "mean" refers to the arithmetic mean.
Average has many meanings, some of which are much less mathematical than the term "mean". Even within the context of numerical summaries, "average" can refer to a broad range of measures of central tendency.
Thus, the arithmetic mean is one type of average. Arguably, when used without qualification the average of a numeric variable often is meant to refer to the arithmetic mean.

util-urls

· One min read
Spark light
Spark light
Left

support ipv6 china

http://cp.cloudflare.com/generate_204
https://img.alicdn.com/a
https://img.alicdn.com/b
https://img.alicdn.com/c
https://img.alicdn.com/d
https://img.alicdn.com/e
https://img.alicdn.com/generate_204
https://img.alicdn.com/test #response.body == test

china

https://i.ytimg.com/generate_204
https://connectivitycheck.platform.hicloud.com/generate_204
https://connectivitycheck.platform.hihonorcloud.com/generate_204
http://wifi.vivo.com.cn/generate_204
http://connectivitycheck.cbg-app.huawei.com/generate_204
http://connect.rom.miui.com/generate_204


https://www.google.com/gen_204
https://www.google.com/generate_204
https://www.v2ex.com/generate_204
http://www.qualcomm.cn/generate_204
http://www.gstatic.com/generate_204
http://clients3.google.com/generate_204
http://www.apple.com/library/test/success
http://connectivitycheck.android.com/generate_204
http://connectivitycheck.gstatic.com/generate_204
http://fireoscaptiveportal.com/generate_204
http://freetimecaptiveportal.com/generate_204
http://gateway.zscalerthree.net/generate_204
http://gateway.zscloud.net/generate_204
http://g.cn/generate_204
http://play.googleapis.com/generate_204
http://speedtest-global.spatialbuzz.net/generate_204
http://tabletcaptiveportal.com/generate_204
http://www.google.cn/generate_204
http://www.msftncsi.com/ncsi.txt
http://captive.roku.com/ok
http://www.appleiphonecell.com
http://captive.apple.com
http://detectportal.firefox.com/success.txt
http://www.msftconnecttest.com/connecttest.txt
http://www.youtube.com/generate_204
https://translate.google.cn/generate_204

big file download test

https://gw.alicdn.com/bao/uploaded/LB1bC41LVXXXXcGXFXXXXXXXXXX.mp4
http://steamusercontent-a.akamaihd.net/rangecheck 2M
https://cdn.akamai.steamstatic.com/steam/apps/5952/movie_max.webm
https://cdn.cloudflare.steamstatic.com/steam/apps/5952/movie_max.webm

ai-learn

· 2 min read
Spark light
Spark light
Left

refs site

To remember

  • one-hot encoding
  • torch.nn.Liner
  • torch.nn.Embedding
torch.tensor([[1,2,4,5]])
weights = torch.rand(10, 3)
net = torch.nn.liner(10,2)
print(net,net.h)
torch.mm

AI > machine learning > deep learning

pytorch.nn.Embedding

理解Epoch, Batch, and Mini-batch

  • Gradient Descent
  • Batch Gradient Descent
  • Stochastic Gradient Descent
  • Mini-Batch Gradient Descent
  • 比如有个2000个sample
  • 将2000个sample整体 一次性输入 (input net train&backward feedback) 就是Batch Gradient Descent
  • 2000个数据one by one共2000次分别(input net train&backward feedback) 就是 stochastic gradient descent
  • 2000个数据份 n组 每组2000/n个sample(input net train&backward feedback) 就是Mini-Batch Gradient Descent
  • 上面三个方式,一次整体sample train完称为一个epoch
  • 要经过多次epoch才能达到(Gradient Descent)剃度下降效果

similarity相似度 | diversity index多样性指数

  • Cosine similarity #向量i和j之间的向量夹角大小 越小越相似
  • Pearson Correlation Coefficient(皮尔逊相关系数) #与余弦相似度相比,加入了用户平均分对各独立评分进行修正,减小了用户评分偏置的影响
  • Euclidean Distance #m维空间中两点之间的距离
  • Jaccard Index(Jaccard similarity coefficient) #两个集合A和B的交集在其二者的并集中所占的比例
  • Jaccard Distance #两个集合中不同元素占所有元素的比例来衡量两个集合的区分度