当前位置: 首页 > article >正文

fate-serving-server增加取数逻辑并源码编译

1.什么是fate-serving-server?

FATE-Serving 是一个高性能、工业化的联邦学习模型服务系统,专为生产环境而设计,主要用于在线推理。

2.fate-serving-server源码编译

下载fate-serving-serving项目(GitHub - FederatedAI/FATE-Serving: A scalable, high-performance serving system for federated learning models),并执行下面的命令

mvn clean
mvn package

3.修改日志输出等级

修改AsyncRoot的level等级为debug

修改AppenderRef中的info和console的日志等级为debug

具体配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<!--
  ~ Copyright 2019 The FATE Authors. All Rights Reserved.
  ~
  ~ Licensed under the Apache License, Version 2.0 (the "License");
  ~ you may not use this file except in compliance with the License.
  ~ You may obtain a copy of the License at
  ~
  ~     http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing, software
  ~ distributed under the License is distributed on an "AS IS" BASIS,
  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License.
  -->
<Configuration status="ERROR" monitorInterval="60">
    <Properties>
        <Property name="logdir">logs</Property>
        <Property name="project">fate</Property>
        <Property name="module">serving-server</Property>
    </Properties>
    <Appenders>
        <Console name="console" target="SYSTEM_OUT">
            <PatternLayout charset="UTF-8"
                           pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} [%-5p] %c{1.}(%F:%L) - %m%n"/>
        </Console>
        <RollingFile name="info" fileName="${logdir}/${project}-${module}.log"
                     filePattern="${logdir}/%d{yyyy-MM-dd}/${project}-${module}.log.%d{yyyy-MM-dd}">
            <PatternLayout charset="UTF-8" pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} [%-5p] %c{1.}(%F:%L) - %m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
            </Policies>
            <DefaultRolloverStrategy max="24"/>
        </RollingFile>

        <RollingFile name="flow" fileName="${logdir}/flow.log"
                     filePattern="${logdir}/%d{yyyy-MM-dd}/flow.log.%d{yyyy-MM-dd}.log">
            <PatternLayout charset="UTF-8" pattern="%d{yyyy-MM-dd HH:mm:ss,SSS}|%m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
            </Policies>
            <DefaultRolloverStrategy max="24"/>
        </RollingFile>

        <RollingFile name="error" fileName="${logdir}/${project}-${module}-error.log"
                     filePattern="${logdir}/${project}-${module}-error.log.%d{yyyy-MM-dd}.log">
            <PatternLayout charset="UTF-8" pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} [%-5p] %c{1.}(%F:%L) - %m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
            </Policies>
            <DefaultRolloverStrategy max="24"/>
        </RollingFile>

        <RollingFile name="debug" fileName="${logdir}/${project}-${module}-debug.log"
                     filePattern="${logdir}/${project}-${module}-debug.log.%d{yyyy-MM-dd}.log">
            <PatternLayout charset="UTF-8" pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} [%-5p] %c{1.}(%F:%L) - %m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
            </Policies>
            <DefaultRolloverStrategy max="24"/>
        </RollingFile>
    </Appenders>

    <Loggers>
        <logger name="org.apache.zookeeper" level="WARN"></logger>

        <AsyncLogger name="flow" level="info" includeLocation="true" additivity="true">
            <AppenderRef ref="flow"/>
        </AsyncLogger>
        <!--
        <AsyncLogger name="debug" level="debug" includeLocation="true" additivity="false">
            <AppenderRef ref="debug"/>
        </AsyncLogger>
        -->

        <AsyncRoot level="debug" includeLocation="true">
            <AppenderRef ref="console" level="debug"/>
            <AppenderRef ref="info" level="debug"/>
            <AppenderRef ref="error" level="error"/>
        </AsyncRoot>
    </Loggers>
</Configuration>

4.在mockAdater增加host自定义取数逻辑

1.找到MockAdapter.java中的getData方法(取数逻辑)

/*
 * Copyright 2019 The FATE Authors. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.webank.ai.fate.serving.adaptor.dataaccess;

import com.webank.ai.fate.serving.core.bean.Context;
import com.webank.ai.fate.serving.core.bean.ReturnResult;
import com.webank.ai.fate.serving.core.constant.StatusCode;
import com.webank.ai.fate.serving.core.utils.JsonUtil;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.HashMap;
import java.util.Map;

public class MockAdapter extends AbstractSingleFeatureDataAdaptor {
    private static final Logger logger = LoggerFactory.getLogger(MockAdapter.class);

    @Override
    public void init() {
        environment.getProperty("port");
    }

    @Override
    public ReturnResult getData(Context context, Map<String, Object> featureIds) {
        logger.info("getData_featureIds:{}", featureIds);
        logger.info("Context:{}", context);
        logger.info("appId:{} callName:{} actionType:{} caseId:{},serviceId:{} servoceName:{}",
                context.getApplyId(), context.getCallName(), context.getActionType(), context.getCaseId(),
                context.getServiceId(), context.getServiceName());
        ReturnResult returnResult = new ReturnResult();
        Map<String, Object> data = new HashMap<>();
        try {
            String mockData = "x0:1,x1:5,x2:13,x3:58,x4:95,x5:352,x6:418,x7:833,x8:888,x9:937,x10:32776";
            for (String kv : StringUtils.split(mockData, ",")) {
                String[] a = StringUtils.split(kv, ":");
                data.put(a[0], Double.valueOf(a[1]));
            }
            returnResult.setData(data);
            returnResult.setRetcode(StatusCode.SUCCESS);

            if (logger.isDebugEnabled()) {
                logger.debug("MockAdapter result, {}", JsonUtil.object2Json(returnResult));
            }
        } catch (Exception ex) {
            logger.error(ex.getMessage());
            returnResult.setRetcode(StatusCode.SYSTEM_ERROR);
        }
        return returnResult;
    }
}
  1. 默认的取数逻辑是一个x0-x10的一个默认值,替换旧的取数逻辑
  2. 重新打包fate-serving-extension服务并替换对应的jar包


http://www.kler.cn/a/9236.html

相关文章:

  • [基础] 001 move的介绍
  • Linux进程通信之共享内存
  • js基础篇笔记 (万字速通)
  • CulturalBench :一个旨在评估大型语言模型在全球不同文化背景下知识掌握情况的基准测试数据集
  • 密码学知识点整理二:常见的加密算法
  • SQL相关常见的面试题
  • vue3中tsx语法一些了解
  • Vue+nodejs快递收发寄件揽件代取网点查询系统
  • 编译技术-优化理论
  • 【剧前爆米花--爪哇岛寻宝】java文件操作和io流
  • 应急响应真的很重要!
  • 全排列1_dfs
  • 数据安全-数据分类分级方案设计
  • Thinkphp 6.0多语言
  • SpringSession深入浅出(一)
  • Chapter2 : SpringBoot配置
  • Sharepoint Online手工迁移方案 | 分享二
  • 问题 A: C语言11.1
  • 【Lin-CMS内容管理系统框架 v0.3.6】内置用户管理/权限管理/日志系统等常见功能
  • 【JS】1651- 10 个 JS 中 try...catch 使用技巧
  • RGBD图像转灰度图
  • Leetcode.100 相同的树
  • 【神经网路】tensorflow实验6--TensorFlow基础
  • 让你的作品更出色——词云Word Cloud的制作方法(基于python,WordCloud,stylecloud)
  • 简单的做一个学校毕业啊项目
  • 【刷题之路】LeetCode 2389. 和有限的最长子序列