• KubeFATE1.7在Ubuntu18.04环境搭建


    Ubuntu18.04修改静态IP

    首先关闭networkManager

    sudo service network-manager stop (关闭NM)
    sudo rm /var/lib/NetworkManager/NetworkManager.state (删除NM)

    ###方法1:

    Ubuntu18.04采用的是netplan来管理network。所以可以在/etc/netplan/目录下创建一个以yaml结尾的文件。在/etc/netplan/目录下有一个缺省文件:01-network-manager-all.yaml,我们可以自己为网卡再建一个文件,也可直接修改这个文件。

    -如,我的网卡是ens33, vim 02-network-manager-ens33.yaml

    # Let manual manage ens33 devices on this system
    network:
      version: 2
      renderer: networkd
      ethernets:
        ens33:
          dhcp4: no
          addresses: [192.168.31.129/24]
          gateway4: 192.168.31.2
          nameservers:
            addresses: [192.168.31.129, 114.114.114.114]
    

      


    这里把DNS和ipv4地址配置在一个文件里了,不用再修改/etc/resolv.conf 文件。
    -**保存后,执行 **

    sudo netplan apply
    ip addr list
    

      

     

    ###方法2:
    编辑:/etc/network/interfaces

    # interfaces(5) file used by ifup(8) and ifdown(8)
    auto lo
    iface lo inet loopback
    auto ens33
    iface ens33 inet static
    address 192.168.31.129
    netmask 255.255.255.0
    gateway 192.168.18.2
    

      

    sudo netplan apply
    ip addr list
    

      

    DNS配置

    修改:/etc/systemd/resolved.conf 在【resolve】中加入DNS地址即可。

    [Resolve]
    DNS=192.168.31.2
    #FallbackDNS=
    #Domains=
    #LLMNR=no
    #MulticastDNS=no
    #DNSSEC=no
    #Cache=yes
    #DNSStubListener=yes
    

      

    ————————————————
    原文链接:https://blog.csdn.net/qq_42975842/article/details/81705244

     

    准备工作

    1. 两个主机(物理机或者虚拟机,Ubuntu或Centos7系统,允许以root用户登录);
    2. 所有主机安装Docker 版本 : 18+;
    3. 所有主机安装Docker-Compose 版本: 1.24+;
    4. 部署机可以联网,所以主机相互之间可以网络互通;
    5. 运行机已经下载FATE 的各组镜

    我用的是ubuntu18.4,且是是root用户下

    第一步:

    可以先安装vim

    apt-get install vim
    

      

    修改两台机器的源均为阿里云的源(建议在修改之前做一下原文件的备份)。

    cp /etc/apt/sources.list /etc/apt/sources.list1(首先备份)
    vim /etc/apt/sources.list            (编辑假如阿里云的源)
    

      


    阿里云源:(ubuntu 18.04)

    deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
    

      

      

    然后执行命令:

    apt-get update
    在运行完这段代码之后,再运行
    apt-get upgrade
    

      

      会从阿里云的镜像库进行安装,速度比国外的要快很多

    第二步

    克隆一个虚拟机,修改IP。然后我是将第一台node01、第二台node02命名

    两台机器要网络互通,也需要可以进行ssh登录root用户,那么你就需要知道root用户的密码,因为在部署过程中,会登录两台机器进行文件的创建,移动等操作,如果不是root用户将会很麻烦!

    node01、node02两台都要做

    安装ssh服务:

    apt-get install openssh-server
    

      

      

    安装完成之后继续在命令行输入

    ps -e | grep ssh
    

     

    如果显示如下,则ssh已经启动了

    root@node01:~# ps -e | grep ssh
    760 ? 00:00:00 sshd
    1734 ? 00:00:00 ssh-agent
    root@node01:~#

    如果未显示相关的ssh,可以通过启动命令,启动ssh服务

    启动命令

    /etc/init.d/ssh start

    重启命令

    /etc/init.d/ssh restart
    或者
    service sshd restart
    关闭命令
    /etc/init.d/ssh stop
    或者
    service sshd stop

    通过如下命令,进行ssh登录

    ssh nde02


    此处的root指的是你需要远程登录的用户名,后面跟着的是主机IP地址
    运行命令之后,你很可能遭遇:

    root@ubuntu:~# ssh root@192.168.29.132
    root@192.168.29.132's password:
    Permission denied, please try again.
    root@192.168.29.132's password:

    不用担心,接下来我们去配置一些文件就可以进行远程连接了。输入命令:

    vim /etc/ssh/sshd_config

    输入完成之后,你会打开一个文件修改其中如下几项:

    PermitRootLogin yes
    PasswordAuthentication yes
    ChallengeResponseAuthentication yes

    保证这几行取消了注释,并且为yes
    OK,保存文件,重启ssh服务,再次输入远程登录命令,回车即可远程登录。

    当然,你也可以选择选择无密登录,需要你互相将两台机器的秘钥文件复制给对方。生成秘钥的命令:

    ssh-keygen -t rsa
    (四连回车)
    如下(类似)即成功:
    +---[RSA 2048]----+
    |+o .+oo.... o |
    |B= +.ooo... = |
    |=oX oo. o .= |
    |.B.+. .. oo . |
    |*o. o S . |
    |*. +. |
    |o.+ . |
    |o. |
    |E |
    +----[SHA256]-----+
    然后
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    然后授权
    chmod 600 ~/.ssh/authorized_keys
    此时你可以尝试免密登录自己的机器,刷~,就成功了

    但是此时你还是只能登录自己的机器,如果需要双向登录,那么就开始传输你们的秘钥吧。

    ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.31.130
    另一台机器也执行相同的操作
    

      

    分别在两台机器上执行,然后你再尝试ssh登录,应该就不需要输入密码了。

    ssh服务安装完,并且已经完成了有密或者无密登录,再安装一个git吧。

    apt-get install git

    原文链接:https://blog.csdn.net/soumnswpz/article/details/105141624

    第三步

    安装docker与docker-compose。

    本步操作内容参考:

    https://blog.csdn.net/ziwuzhulin/article/details/97139423

    https://www.jianshu.com/p/482d1eb4d9a2

    这里我将会用全代码形式,不再进行赘述。

    更新系统源
    
    sudo apt-get update
    
    安装允许apt使用基于https的仓库安装软件
    
    sudo apt-get install 
    apt-transport-https 
    ca-certificates 
    curl 
    gnupg-agent 
    software-properties-common
    
    添加GPG密钥(注意最后还有一个 - )
    
    curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
    
    然后验证密钥是否添加成功,输入指令
    
    sudo apt-key fingerprint 0EBFCD88

    出现如下图片,则添加成功

    继续执行代码:

    写入docker stable版本的阿里云镜像软件源
     
    sudo add-apt-repository 
       "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu 
        $(lsb_release -cs) 
        stable"
     
    更新软件源
     
    sudo apt-get update
     
    安装最新版的docker ce
     
    sudo apt-get install docker-ce docker-ce-cli containerd.io
     
    运行,验证
     
    docker run hello-world

    出现如下即为成功:

    OK,继续安装docker-compose

    安装国内的,国外的太慢
    
    sudo curl -L "https://get.daocloud.io/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    
    这里面的1.24.1可以替换为最新版本的,移步至
    https://docs.docker.com/compose/install/
    查看最新版本
    
    对二进制文件应用可执行权限:
    
    chmod +x /usr/local/bin/docker-compose
    
    运行
    
    docker --version
    
    docker-compose --version
    

      

    原文链接:https://blog.csdn.net/soumnswpz/article/details/105141624

    在部署机下载 FATE 的 docker-compose 安装包

    我是将node01作为部署机

    以下是部署机的操作,目标机不用动,

    cd /usr/local
    下载并解压Kubefate1.3的kubefate-docker-compose.tar.gz资源包
    # wget https://github.com/FederatedAI/KubeFATE/releases/download/v1.6.1/kubefate-docker-compose-v1.6.1.tar.gz
    
    # tar -xzf kubefate-docker-compose-v1.6.1.tar.gz
    
    进入安装目录
    cd docker-deploy

    FATE的各个版本的安装包都可以在这里找到 

    https://github.com/FederatedAI/KubeFATE/releases

    修改配置

     主要修改party_ip_listserving_ip_list(第一个node01的ip,第二个node02),其他的可以默认不变。 如果想要使用spark计算引擎,修改computing_backend=spark即可。

    user改成root

    第一次部署的时候镜像需要从docker hub下载,由于国内用户经常不能链接docker hub,可以使用hub.c.163.com的镜像,只需要配置RegistryURI就可以。

    生成安装包

    根据上文的配置生成相对应的安装文件包

    bash generate_config.sh

    这一步会生成部署FATE的两方的所有tar包。如果修改了配置文件parties.conf或者.env,那么就需要重新生成安装包。

    部署

    部署双方的FATE和FATE-Serving

    bash docker_deploy.sh all (启动集群)
    

      

      执行时间超长,请保持良好网络,耐心等待

    这一步会通过scp和ssh的方式将tar包拷贝到目标主机的对应目录,然后启动FATE集群。

    验证集群基本功能

    # docker exec -it confs-10000_python_1 bash
    
    # cd /data/projects/fate/python/examples/toy_example
    
    # python run_toy_example.py 10000 9999 1

    如果测试通过,屏幕将显示类似如下消息:

    "2019-08-29 07:21:25,353 - secure_add_guest.py[line:96] - INFO: begin to init parameters of secure add example guest"
    "2019-08-29 07:21:25,354 - secure_add_guest.py[line:99] - INFO: begin to make guest data"
    "2019-08-29 07:21:26,225 - secure_add_guest.py[line:102] - INFO: split data into two random parts"
    "2019-08-29 07:21:29,140 - secure_add_guest.py[line:105] - INFO: share one random part data to host"
    "2019-08-29 07:21:29,237 - secure_add_guest.py[line:108] - INFO: get share of one random part data from host"
    "2019-08-29 07:21:33,073 - secure_add_guest.py[line:111] - INFO: begin to get sum of guest and host"
    "2019-08-29 07:21:33,920 - secure_add_guest.py[line:114] - INFO: receive host sum from guest"
    "2019-08-29 07:21:34,118 - secure_add_guest.py[line:121] - INFO: success to calculate secure_sum, it is 2000.0000000000002"
    

    验证Serving-Service功能

    以下内容将会对部署好的两个FATE集群进行简单的训练和推理测试。训练所用到的数据集是”breast”(),其中”breast”按列分为”breast_a”和”breast_b”两部分,参与训练的host方持有”breast_a”,而guest方则持有”breast_b”。guest和host将联合起来对数据集进行一个异构的逻辑回归训练。最后当训练完成后还会将得到的模型推送到FATE Serving作在线推理。

    以下操作在workspace1上进行

    进入python容器
    
    # docker exec -it confs-10000_python_1 bash
    
    进入fate_flow目录
    
    # cd fate_flow
    
    修改examples/upload_host.json
    
    # vi examples/upload_host.json
    {
      "file": "examples/data/breast_a.csv",
      "head": 1,
      "partition": 10,
      "work_mode": 1,
      "namespace": "fate_flow_test_breast",
      "table_name": "breast"
    }
    
    把“breast_a.csv”上传到系统中
    
    # python fate_flow_client.py -f upload -c examples/upload_host.json 
    
    

    以下操作在workspace2上进行

    进入python容器
    
    # docker exec -it confs-9999_python_1 bash
    
    进入fate_flow目录
    
    # cd fate_flow
    
    修改examples/upload_guest.json
    
    # vi examples/upload_guest.json
    {
      "file": "examples/data/breast_b.csv",
      "head": 1,
      "partition": 10,
      "work_mode": 1,
      "namespace": "fate_flow_test_breast",
      "table_name": "breast"
    }
    
    把“breast_b.csv”上传到系统中
    
    # python fate_flow_client.py -f upload -c examples/upload_guest.json 
    
    修改examples/test_hetero_lr_job_conf.json
    
    # vi examples/test_hetero_lr_job_conf.json
    {
        "initiator": {
            "role": "guest",
            "party_id": 9999
        },
        "job_parameters": {
            "work_mode": 1
        },
        "role": {
            "guest": [9999],
            "host": [10000],
            "arbiter": [10000]
        },
        "role_parameters": {
            "guest": {
                "args": {
                    "data": {
                        "train_data": [{"name": "breast", "namespace": "fate_flow_test_breast"}]
                    }
                },
                "dataio_0":{
                    "with_label": [true],
                    "label_name": ["y"],
                    "label_type": ["int"],
                    "output_format": ["dense"]
                }
            },
            "host": {
                "args": {
                    "data": {
                        "train_data": [{"name": "breast", "namespace": "fate_flow_test_breast"}]
                    }
                },
                 "dataio_0":{
                    "with_label": [false],
                    "output_format": ["dense"]
                }
            }
        },
        ....
    }
    
    
    

    提交任务对上传的数据集进行训练

    # python fate_flow_client.py -f submit_job -d examples/test_hetero_lr_job_dsl.json -c examples/test_hetero_lr_job_conf.json
    

    输出结果:

    {
        "data": {
            "board_url": "http://fateboard:8080/index.html#/dashboard?job_id=202003060553168191842&role=guest&party_id=9999",
            "job_dsl_path": "/data/projects/fate/python/jobs/202003060553168191842/job_dsl.json",
            "job_runtime_conf_path": "/data/projects/fate/python/jobs/202003060553168191842/job_runtime_conf.json",
            "logs_directory": "/data/projects/fate/python/logs/202003060553168191842",
            "model_info": {
                "model_id": "arbiter-10000#guest-9999#host-10000#model",
                "model_version": "202003060553168191842"
            }
        },
        "jobId": "202003060553168191842",
        "retcode": 0,
        "retmsg": "success"
    }
    

     

    训练好的模型会存储在EGG节点中,模型可通过在上述输出中的“model_id” 和 “model_version” 来定位。FATE Serving的加载和绑定模型操作都需要用户提供这两个值。

     

    查看任务状态直到”f_status”为success,把上一步中输出的“jobId”方在“-j”后面。

    # python fate_flow_client.py -f query_task -j 202003060553168191842 | grep f_status
    
    output:
    
        "f_status": "success",
        "f_status": "success",
    

    修改加载模型的配置,把上一步中输出的“model_id”和“model_version”与文件中的进行替换。

    # vi examples/publish_load_model.json
    {
        "initiator": {
            "party_id": "9999",
            "role": "guest"
        },
        "role": {
            "guest": ["9999"],
            "host": ["10000"],
            "arbiter": ["10000"]
        },
        "job_parameters": {
            "work_mode": 1,
            "model_id": "arbiter-10000#guest-9999#host-10000#model",
            "model_version": "202003060553168191842"
        }
    }
    

    加载模型

    # python fate_flow_client.py -f load -c examples/publish_load_model.json
    

    修改绑定模型的配置, 替换“model_id”和“model_version”,并给“service_id”赋值“test”。其中“service_id”是推理服务的标识,该标识与一个模型关联。用户向FATE Serving发送请求时需要带上“service_id”,这样FATE Serving才会知道用哪个模型处理用户的推理请求。

    # vi examples/bind_model_service.json
    {
        "service_id": "test",
        "initiator": {
            "party_id": "9999",
            "role": "guest"
        },
        "role": {
            "guest": ["9999"],
            "host": ["10000"],
            "arbiter": ["10000"]
        },
        "job_parameters": {
            "work_mode": 1,
            "model_id": "arbiter-10000#guest-9999#host-10000#model",
            "model_version": "202003060553168191842"
        }
    }

    绑定模型

    # python fate_flow_client.py -f bind -c examples/bind_model_service.json
    


    在线测试,通过curl发送以下信息到192.168.7.2:8059/federation/v1/inference

    curl -X POST -H 'Content-Type: application/json' -d ' {"head":{"serviceId":"test"},"body":{"featureData": {"x0": 0.254879,"x1": -1.046633,"x2": 0.209656,"x3": 0.074214,"x4": -0.441366,"x5": -0.377645,"x6": -0.485934,"x7": 0.347072,"x8": -0.287570,"x9": -0.733474}}' 'http://192.168.7.2:8059/federation/v1/inference'
    
     

    输出结果:

    {"flag":0,"data":{"prob":0.30684422824464636,"retmsg":"success","retcode":0}
    

    若输出结果如上所示,则验证了serving-service的功能是正常的。上述结果说明有以上特征的人确诊概率为30%左右。

     

    删除部署

    如果需要删除部署,则在部署机器上运行以下命令可以停止所有FATE集群:

    # bash docker_deploy.sh --delete all
    

    如果想要彻底删除在运行机器上部署的FATE,可以分别登录节点,然后运行命令:

    # cd /data/projects/fate/confs-<id>/ # the id of party
    # docker-compose down
    # rm -rf ../confs-<id>/ 
    

     

  • 相关阅读:
    关于systemgenerator的学习方法
    关于FPGA的非HDL设计方法比较
    vivado simlation post-implementation "not found module"问题分析
    快速重启tomcat的shell脚本
    python2 和python3报错:No module named ‘MySQLdb'”
    CentOS生产环境无网络安装percona-xtrabackup2.4【RPM安装教程】
    磁盘system ID解释
    对硬盘进行扩容,LVM逻辑卷创建案例实记
    LVS的原理
    毕业1年,我是如何走向运维工程师的
  • 原文地址:https://www.cnblogs.com/69-year-old-comrade/p/15356942.html
Copyright © 2020-2023  润新知