Skip to content
DBC-WikiDBC-Wiki
github icon
  • 安装&升级DBC节点

      • 安装 DBC 算力节点
        • (一) 安装前准备(基于已配置好固定公网 ip 地址),部署 KVM 安装环境
          • (二) 创建和挂载 XFS 文件系统
            • (三) 判断机器是否支持虚拟化
              • (四) 确认机器显卡被 vfio-pci 占用后,启动 libvirtd 服务并设置开机自启
                • (五) 创建 dbc 用户
                  • (六) 安装 DBC 功能节点程序
                    • (七) 下载镜像模板(请放置于/data 目录下,dbc 启动虚拟机会去/data 目录搜寻)
                      • (八) 备份机器 id 以及私钥
                        • (九) 测试创建带有显卡直通的虚拟机,用来检测前面是否正确配置
                          • (十) 检测机器的各种硬件参数指标是否正常
                            • (十一) 如果执行 pytest 卡住或者 nvidia 没有任何调用,请按照以下思路排查
                              • (十二) 查看机器是否正确加入到算力网络
                                • (十三) 机器上链
                                  • (十四) 设置监控服务
                                  • 升级 DBC 算力节点
                                    • 安装和升级 DBC 客户端
                                      • 部署镜像中心

                                    安装 DBC 算力节点

                                    calendar icon2022年1月8日timer icon大约 9 分钟

                                    此页内容
                                    • (一) 安装前准备(基于已配置好固定公网 ip 地址),部署 KVM 安装环境
                                    • (二) 创建和挂载 XFS 文件系统
                                    • (三) 判断机器是否支持虚拟化
                                    • (四) 确认机器显卡被 vfio-pci 占用后,启动 libvirtd 服务并设置开机自启
                                    • (五) 创建 dbc 用户
                                    • (六) 安装 DBC 功能节点程序
                                    • (七) 下载镜像模板(请放置于/data 目录下,dbc 启动虚拟机会去/data 目录搜寻)
                                    • (八) 备份机器 id 以及私钥
                                    • (九) 测试创建带有显卡直通的虚拟机,用来检测前面是否正确配置
                                    • (十) 检测机器的各种硬件参数指标是否正常
                                    • (十一) 如果执行 pytest 卡住或者 nvidia 没有任何调用,请按照以下思路排查
                                    • (十二) 查看机器是否正确加入到算力网络
                                    • (十三) 机器上链
                                    • (十四) 设置监控服务

                                    # 安装 DBC 算力节点

                                    # (一) 安装前准备(基于已配置好固定公网 ip 地址),部署 KVM 安装环境

                                    注意!

                                    系统采用 20.04 server 版本

                                    sudo echo "140.82.114.4 github.com"   >> /etc/hosts
                                    sudo echo "199.232.5.194 github.global.ssl.fastly.net"   >> /etc/hosts
                                    sudo echo "nameserver 8.8.4.4" | sudo tee /etc/resolv.conf > /dev/null
                                    sudo apt-get update
                                    sudo apt-get upgrade -y
                                    sudo apt-get  install qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils virt-manager ovmf cpu-checker vim expect -y
                                    
                                    1
                                    2
                                    3
                                    4
                                    5
                                    6

                                    # (二) 创建和挂载 XFS 文件系统

                                    1、查看硬盘分区情况

                                    lsblk

                                    2、创建数据盘文件夹并且格式化硬盘、挂载硬盘(数据盘挂载目录务必为/data)

                                    sudo mkdir /data
                                    sudo apt-get install xfsprogs -y
                                    sudo mkfs.xfs -n ftype=1 -f /dev/sdb  (此处是否为sdb需要根据lsblk查看情况而定)
                                    sudo mount  -o pquota /dev/sdb /data
                                    sudo chmod 777 /data
                                    sudo echo "/dev/sdb /data     xfs pquota 0 1" >> /etc/fstab
                                    sudo mount -a
                                    
                                    1
                                    2
                                    3
                                    4
                                    5
                                    6
                                    7

                                    # (三) 判断机器是否支持虚拟化

                                    1、开启硬件支持

                                    BIOS 开启 VT-d(如果是 AMD 平台,需要开启 AMD-Vi 具体操作根据主板类型浏览器搜索即可) VT(VT-x)及 VT-d 支持,AMD 叫 AMD-Vi。需要将相关支持设置为 enable,默认开启

                                    一般情况下路径:Processor—IIO Configuration—Intel@ VT for Directed I/O(VT-d)

                                    2、环境依赖,检查 CPU 是否支持虚拟化以及 KVM 是否可用

                                    egrep -c '(svm|vm)' /proc/cpuinfo

                                    CPU 检测,如果显示为 0,则不支持虚拟化

                                    kvm-ok

                                    检查 kvm 是否可用

                                    显示 INFO: /dev/kvm exists KVM acceleration can be used 表示可以进行后续操作,如果显示与其不相符,请检查 VT-d 是否正确开启

                                    3、检查 ip_forward 转发是否开启

                                    查看/proc/sys/net/ipv4/ip_forward 是否为 1 如果不为 1 则执行:

                                    sudo sh -c 'echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf'
                                    sudo sysctl -p
                                    
                                    1
                                    2

                                    查看 lsmod | grep br_netfilter 是否有输出 如果没有输出则执行:

                                    sudo sh -c 'echo "br_netfilter" > /etc/modules-load.d/br_netfilter.conf'
                                    
                                    1

                                    执行完后需要重启,也可以与设置完显卡直通后一起重启

                                    vfio 环境准备

                                    • 设置黑名单,使卡不被占用
                                    sudo vim /etc/modprobe.d/blacklist.conf
                                    #最后添加内容:
                                    blacklist snd_hda_intel
                                    blacklist amd76x_edac
                                    blacklist vga16fb
                                    blacklist nouveau
                                    blacklist rivafb
                                    blacklist nvidiafb
                                    blacklist rivatv
                                    
                                    1
                                    2
                                    3
                                    4
                                    5
                                    6
                                    7
                                    8
                                    9
                                    • 设置显卡直通
                                    #查询显卡ID
                                    lspci -nnv | grep NVIDIA
                                    复制显卡id,例如10de:2231  10de:1aef,重复内容仅保留一次即可
                                    
                                    #修改内核文件
                                    sudo vim /etc/default/grub
                                    #在GRUB_CMDLINE_LINUX_DEFAULT字段添加(如果是AMD平台,intel_iommu=on改为amd_iommu=on)
                                    quiet splash intel_iommu=on kvm.ignore_msrs=1 vfio-pci.ids=显卡id,中间以逗号隔开
                                    #在GRUB_CMDLINE_LINUX字段添加
                                    quiet splash intel_iommu=on iommu=pt rd.driver.pre=vfio-pci
                                    
                                    
                                    #更新内核
                                    sudo update-grub
                                    
                                    #重启机器
                                    reboot
                                    #查询显卡占用情况
                                    lspci -vv -s <显卡PCI接口,例如00:01.0> | grep driver
                                    
                                    1
                                    2
                                    3
                                    4
                                    5
                                    6
                                    7
                                    8
                                    9
                                    10
                                    11
                                    12
                                    13
                                    14
                                    15
                                    16
                                    17
                                    18
                                    19

                                    显示 vfio-pci 即为正常,非 vfio-pci 请返回查看 grub 文件是否正确,如果无任何输出,请执行下面的手动绑定

                                    • 检查内核参数:

                                    检查/proc/sys/net/bridge/bridge-nf-call-iptables和/proc/sys/net/bridge/bridge-nf-call-ip6tables是否都=1

                                    手动绑定 GPU(仅限上一步查询没有输出的情况,以下示例仅作演示请根据实际查询结果进行替换)

                                    #执行命令进行绑定(注意:echo后的内容为机器查询到的显卡id)已经被占用的PCI可不用再手动绑定
                                    sudo -i
                                    sudo echo 10de 1e82 > /sys/bus/pci/drivers/vfio-pci/new_id
                                    sudo echo 10de 2206 >> /sys/bus/pci/drivers/vfio-pci/new_id
                                    …………
                                    
                                    
                                    #绑定完成后再次查询(每张卡的所有项都要查一下)
                                    lspci -vv -s 17:00.0 | grep driver
                                    #如果出现 Kernel driver in use : vfio-pci 说明绑定成功。如果仍未成功,请返回检查
                                    
                                    1
                                    2
                                    3
                                    4
                                    5
                                    6
                                    7
                                    8
                                    9
                                    10

                                    # (四) 确认机器显卡被 vfio-pci 占用后,启动 libvirtd 服务并设置开机自启

                                    注意

                                    这一步配置非常重要! 如果没有正确配置将无法正确接收请求,会直接影响机器在链状态,影响出租,造成损失

                                    1、开启 virt tcp 监听服务:

                                    修改配置文件:
                                    sudo vim /etc/libvirt/libvirtd.conf
                                    
                                    找到下边这2行,去掉开头的#号:
                                    #listen_tls = 0
                                    #listen_tcp = 1
                                    
                                    找到这一行,去掉开头#号,并且将sasl改为none:
                                    #auth_tcp = "sasl"	======>	auth_tcp = "none"
                                    
                                    sudo vim /etc/default/libvirtd
                                    #对应修改为如下配置(这个是小写L)
                                    libvirtd_opts="-l"
                                    
                                    #修改完成后请执行:
                                    systemctl mask libvirtd.socket libvirtd-ro.socket libvirtd-admin.socket libvirtd-tls.socket libvirtd-tcp.socket
                                    
                                    1
                                    2
                                    3
                                    4
                                    5
                                    6
                                    7
                                    8
                                    9
                                    10
                                    11
                                    12
                                    13
                                    14
                                    15
                                    16

                                    2、启动 libvirtd 并设置开机自启&检查服务状态

                                    • sudo systemctl restart libvirtd.service
                                    • sudo systemctl enable libvirtd.service
                                    • systemctl status libvirtd

                                    3、测试 libvirtd 是否启动成功

                                    • virsh connect qemu+tcp://localhost:16509/system
                                    • 如果没有输出错误,就说明启动成功了;

                                    # (五) 创建 dbc 用户

                                    sudo wget http://116.85.24.172:20444/static/add_dbc_user.sh
                                    sudo chmod +x add_dbc_user.sh
                                    sudo ./add_dbc_user.sh dbc
                                    #dbc用户密码自行设定
                                    
                                    1
                                    2
                                    3
                                    4

                                    # (六) 安装 DBC 功能节点程序

                                    • 注意:需要切换到 dbc 用户安装
                                    1. 下载 dbc 功能节点的安装脚本: http://116.169.53.132:9000/dbc/install_update_script/mainnet/install_mining.sh
                                    2. 给安装脚本添加可执行权限: 命令行下执行:chmod +x ./install_mining.sh
                                    3. 运行安装脚本: 命令行下执行:./install_mining.sh [安装目录]

                                    (安装过程中,需要用户输入 2 个本地监听端口号)

                                    # (七) 下载镜像模板(请放置于/data 目录下,dbc 启动虚拟机会去/data 目录搜寻)

                                    http://116.169.53.132:9000/image 下载:ubuntu.qcow2 和 windows_1909.qcow2 这两个镜像

                                    # (八) 备份机器 id 以及私钥

                                    注意

                                    非常重要,如果此私钥丢失会损失 50%的质押币,请注意多个地方备份

                                    备份安装目录下的 dat/node.dat 文件,放到安全的位置,后面如果重装系统或者重装 DBC 需要用原来的 id 和私钥,否则质押币会被扣除

                                    # (九) 测试创建带有显卡直通的虚拟机,用来检测前面是否正确配置

                                    • 测试程序下载地址:http://116.169.53.132:9000/dbc/package/check_env
                                    • 二进制文件,添加执行权限直接执行即可: chmod 777 chec_env ; ./check_env
                                    • 出现绿色check vm domain_test successful即为成功,若没有出现,请排查前面各项配置是否正确。

                                    # (十) 检测机器的各种硬件参数指标是否正常

                                    • 如果第十五步检测成功,会成功创建一个虚拟机,通过 ssh 登陆进入这个虚拟机内部,其中:vm_local_ip 是虚拟机的内网 ip 地址,用户名是 dbc,pwd 后面的是登陆密码 1629202906(1)

                                    • 然后 cd 到测试脚本目录,运行: 【pytest .】,

                                      • cd /test/dbc_gpu_server_test/
                                      • sudo -i (切换到 root 用户)
                                      • pytest .
                                    • 测试共 18 项;

                                      • 10 项单元测试,测试 CPU,内存,硬盘,显卡,显存,cuda 可用性等;
                                      • 7 项集成测试,测试实际各种使用情况是否正常(如 pytorch 计算 训练 推理), 排除潜在硬件故障;
                                      • 1 项 benchmark 速度测试,测试数十种 CNN 网络的训练和推理,持续约十分钟;
                                      • 无红色 error 则通过,有红色 F / error 会显示报错对应测试项,可根据信息排查;
                                      • 4 卡 2080ti 全测试过程约 10 分钟,若测试时间过长如超过半小时,则机器可能存在问题可以提前中止测试(不中止则需要等测试完成后才会报 error);
                                      • 测试结果中 short test summary info:如果全部是 passed,表示测试通过,只要有一项是 failed 表示测试不通过,需要排查故障;
                                      • 结束后生成 result 文件夹导出性能报告;
                                    • 回到宿主机关闭并删除测试的虚拟机:./check_env --localip x.x.x.x (x.x.x.x 为虚拟机的内网 ip 地址,这一步不操作,会导致 dbc 程序无法启动新的虚拟机,从而无法上链验证通过)

                                    # (十一) 如果执行 pytest 卡住或者 nvidia 没有任何调用,请按照以下思路排查

                                    # 查看是否是vfio报错  dmesg | grep vfio-pci
                                    
                                    root@HJICT:~# dmesg | grep vfio-pci
                                    [   42.583025] vfio-pci 0000:01:00.0: vgaarb: changed VGA decodes: olddecodes=io+mem,decodes=io+mem:owns=io+mem
                                    [   79.128425] vfio-pci 0000:01:00.0: vfio_ecap_init: hiding ecap 0x1e@0x258
                                    [   79.128446] vfio-pci 0000:01:00.0: vfio_ecap_init: hiding ecap 0x19@0x900
                                    [   79.128454] vfio-pci 0000:01:00.0: vfio_ecap_init: hiding ecap 0x26@0xc1c
                                    [   79.128457] vfio-pci 0000:01:00.0: vfio_ecap_init: hiding ecap 0x27@0xd00
                                    [   79.128461] vfio-pci 0000:01:00.0: vfio_ecap_init: hiding ecap 0x25@0xe00
                                    [   79.129879] vfio-pci 0000:01:00.0: BAR 1: can't reserve [mem 0x90000000-0x9fffffff 64bit pref]
                                    [   79.148593] vfio-pci 0000:01:00.1: vfio_ecap_init: hiding ecap 0x25@0x160
                                    [  183.031546] vfio-pci 0000:01:00.0: BAR 1: can't reserve [mem 0x90000000-0x9fffffff 64bit pref]
                                    [  183.031575] vfio-pci 0000:01:00.0: BAR 1: can't reserve [mem 0x90000000-0x9fffffff 64bit pref]
                                    [  183.049344] vfio-pci 0000:01:00.0: BAR 1: can't reserve [mem 0x90000000-0x9fffffff 64bit pref]
                                    [  183.049375] vfio-pci 0000:01:00.0: BAR 1: can't reserve [mem 0x90000000-0x9fffffff 64bit pref]
                                    
                                    # vfio-pci 有一个明显的错误,进一步查看
                                    
                                    root@HJICT:~# cat /proc/iomem
                                    00000000-00000fff : Reserved
                                    00001000-0009d3ff : System RAM
                                    0009d400-0009ffff : Reserved
                                    000a0000-000bffff : PCI Bus 0000:00
                                    000c0000-000cf3ff : Video ROM
                                    000e0000-000fffff : Reserved
                                      000f0000-000fffff : System ROM
                                    00100000-8ceacfff : System RAM
                                    8cead000-8e718fff : Reserved
                                    8e719000-8e895fff : System RAM
                                    8e896000-8ec98fff : ACPI Non-volatile Storage
                                    8ec99000-8f40efff : Reserved
                                    8f40f000-8f40ffff : System RAM
                                    8f410000-8fffffff : Reserved
                                    90000000-dfffffff : PCI Bus 0000:00
                                      90000000-a1ffffff : PCI Bus 0000:01
                                        90000000-9fffffff : 0000:01:00.0
                                          90000000-9fffffff : vesafb
                                        a0000000-a1ffffff : 0000:01:00.0
                                          a0000000-a1ffffff : vfio-pci
                                      a2000000-a30fffff : PCI Bus 0000:01
                                        a2000000-a2ffffff : 0000:01:00.0
                                          a2000000-a2ffffff : vfio-pci
                                        a3080000-a3083fff : 0000:01:00.1
                                          a3080000-a3083fff : vfio-pci
                                      a3100000-a31fffff : 0000:00:1f.3
                                      a3200000-a32fffff : PCI Bus 0000:02
                                        a3200000-a32001ff : 0000:02:00.0
                                          a3200000-a32001ff : ahci
                                    
                                    
                                    
                                    #  上面可以看到,90000000-9fffffff  被vesafb占用,并非vfio-pci
                                    
                                    # 修改/etc/default/grub,关闭vga,
                                    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash intel_iommu=on iommu=pt pcie_acs_override=multifunction nofb video=vesafb:off video=efifb:off vga=off"
                                    GRUB_CMDLINE_LINUX="quiet splash intel_iommu=on iommu=pt rd.driver.pre=vfio-pci"
                                    
                                    
                                    更新并重启
                                    update-initramfs -u -k all
                                    update-grub
                                    reboot
                                    
                                    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

                                    # (十二) 查看机器是否正确加入到算力网络

                                    • 矿池搭建客户端节点 请参考 install_update_dbc_client_cn.md
                                    • 1 分钟后,通过客户端请求机器信息,如果能够查到机器信息,说明机器已加入到网络中 请求机器信息,请参考:dbc_client_http_api
                                    • 关于客户端节点:建议每家矿池搭建 2 个及以上客户端节点,保证在官方提供节点或者其他矿池提供节点掉线情况下依旧可以保证网络正常,如果网络中客户端节点过少或者挂掉过多,会影响机器出租情况。客户端节点搭建可以在其他服务器启动一个容器来部署,并不会占用太多资源。
                                    • 客户端节点可以与算力节点部署在同一台机器,注意每个节点的 conf/core.conf 配置文件中的端口号不要重复

                                    # (十三) 机器上链

                                    https://deepbrainchain.github.io/DBC-Wiki/onchain-guide/bonding-machine.htmlopen in new window

                                    # (十四) 设置监控服务

                                    • 设置 DBC 的监控服务器地址:在 conf/core.conf 中添加配置"dbc_monitor_server=ip:port"
                                    • 设置矿工的监控服务器地址:在 conf/core.conf 中添加配置"miner_monitor_server=ip:port"
                                    • 设置租用人的监控服务器地址:https://deepbrainchain.github.io/DBC-Wiki/install-update-dbc-node/dbc-monitor/http-monitor-api.html
                                    edit icon编辑此页open in new window
                                    上次编辑于: 2022/5/25 08:55:41
                                    贡献者: q2777,cuijg,ytvchsy,Jerry,kaigedong
                                    下一页
                                    升级 DBC 算力节点