西南IT社区
    • 注册
    • 登录
    • 搜索
    • 主页
    • 问答
    • 话题
    • 热门
    • 圈子
    • 工作机会
    • 活动
    • 项目
    1. 主页
    2. tarao616
    • 资料
    • 关注 0
    • 粉丝 0
    • 主题 48
    • 帖子 48
    • 最佳 0
    • 有争议的 0
    • 群组 0

    tarao616

    @tarao616

    0
    声望
    1
    资料浏览
    48
    帖子
    0
    粉丝
    0
    关注
    注册时间 最后登录

    tarao616 取消关注 关注

    tarao616 发布的最新帖子

    • 图的表示方法

        所谓的搜索,就是在数据集合中寻找某种满足条件的数据结构。企业级系统的重要组成部分就是搜索,搜索逐渐在发挥着重要的作用,ES已经成为每一个互联网企业必备的工具集。而它作为搜索的一个最基础的部分,文本匹配的重要性就显得更为重要了。文本匹配不仅仅为精确搜索提供了方法,而且还为模糊匹配提供了算法依据。

      我们考虑实用情况,以有向图为例:我们假设可以以省会城市开始对顶点编号。如下图
      b58bdb1f-169a-4237-a925-1842891212f4-image.png
        邻接矩阵:表示图的一种简单的方法是使用一个二维数据,称为邻接矩阵表示法。有一个二维数组A,对于每条边(u,v),置A[u][v]等于true;否则数组元素就是false。如果边有一个权,那么可以置A[u][v]等于该权,而使用很大或者很小的权作为标记表示不存在的边。虽然这种表示方法的优点是简单,但是,它的空间复杂度为θ(|V|^2),如果图的边不是很多(稀疏的),那么这种表示的代价就太大了。代码如下:
      f351eb62-4a2e-47c8-81e0-be31a3f59347-image.png

      发布在 技术答疑 图的表示方法
      tarao616
      tarao616
    • 回归与分类

        机器学习的主要任务便是聚焦于两个问题:回归与分类。
        回归的定义:机器学习的过程就是寻找函数的过程,通过训练获得一个函数映射,给定函数的输入,函数会给出相应的一个输出,若输出结果是一个数值scalar时,即称这一类机器学习问题为回归问题。就如李宏毅老师所说:Regression就是找到一个函数function,通过输入特征x,输出一个数值scalar。例如:房价数据,根据位置、周边、配套等等这些维度,给出一个房价的预测。
        分类与回归的区别:分类是基于数据集,作出分类选择;分类与回归区别在一输出变量的类型。输出是离散的就可以做分类问题,即通常多个输出,输出i是预测为第i类的置信度;输出是连续的就可以做回归问题 ,即单连续值输出,跟真实值区别作为损失。
      模型步骤

      • step1:模型假设,选择模型框架(线性模型);step2:模型评估,如何判断众多模型的好坏(损失函数);step3:模型优化,如何筛选最优的模型(梯度下降);
        线性模型:step1 模型假设:给定n维输入 x = [x1,x2,....,xn]^T;线性模型有一个n维权重和一个标量偏差 即w与b;输出是输入的加权和 y = w1x1 + w2x2 + ... +wnxn +b
        向量版本 y = <w,x> + b

      • 假设1:影响房价的关键因素是卧室个数,卫生间个数,和居住面积,记为x1,x2,x3

      • 假设2:成交价是关键因素的加权和 则 y = w1x1 + w2x2 +w3x3 + b,权重和偏置的实际值在后面决定。

      • step2 模型评估(衡量预估质量);收集和训练数据;如何判断众多模型的好坏(根据损失函数判断):1.平方损失 y为真实值,y1为估计值(预测值):p(y,y1) = 1/2(y-y1)^2
        2.训练损失:p(X,y,w,b) = ∑(y[i] - (b + <w,x[i]>))^2

      • step3 选取最优模型(梯度下降):为了获得最优模型故要使L(w,b)损失函数值最小化,而对于L(w,b)实质上就是w,b的函数,因此可以通过求偏微分来寻找其最小化损失点。

      8c70f48f-03e9-4e0f-91dd-6f436d9ba305-image.png

      发布在 技术答疑 回归与分类
      tarao616
      tarao616
    • Service Mesh的价值

      无论是单体应用,还是分布式应用,都可以建立在Service Mesh上,mesh上的sidecar支撑了所有的上层应用,业务开发者无须关心底层构成,可以用Java,也可以用Go等语言完成自己的业务开发。
      当微服务架构体系越来越复杂的时候,需要将“业务服务”和“基础设施”解耦,将一个微服务进程一分为二:
      380dae46-f74a-403c-8fa8-25504151c1d1-image.png
      为什么代理会叫sidecar proxy?
      35680da3-2b94-43be-8d4d-51ce0271e54b-image.png
      看了上图就容易懂了,biz和proxy相生相伴,就像摩托车(motor)与旁边的车厢(sidecar)。
      未来,sidecar和proxy就指微服务进程解耦成两个进程之后,提供基础能力的那个代理进程。
      Istio的理论概念是Service Mesh(服务网络),我们不必纠结于概念实际也是微服务的一种落地形式有点类似上面的SideCar模式。

      它的主要思想是关注点分离,即不像SpringCloud一样交给研发来做,也不集成到k8s中产生职责混乱,Istio是通过为服务配 Agent代理来提供服务发现、负截均衡、限流、链路跟踪、鉴权等微服务治理手段。

      Istio开始就是与k8s结合设计的,Istio结合k8s可以牛逼的落地微服务架构。
      istio 超越 spring cloud和dubbo 等传统开发框架之处, 就在于不仅仅带来了远超这些框架所能提供的功能, 而且也不需要应用程序为此做大量的改动,开发人员也不必为上面的功能实现进行大量的知识储备。

      发布在 技术答疑 分布式应用 单体应用 service mesh
      tarao616
      tarao616
    • Popup控件的主要属性

      Popup控件是从FrameworkElement直接继承⽽来的,属于⾮常⾼的层级,我们在使⽤中使⽤的最多的属性就是下⾯这些属性:
      PlacementTarget 表⽰Popup控件的放置的位。
      Popup表示具有内容的弹出窗口,其主要属性为:Child:获取或设置 Popup控件的内容。
      IsOpen:获取或设置一个值,该值指示Popup 是否可见。
      Placement:获取或设置 Popup 控件打开时的控件方向,并指定Popup 控件在与屏幕边界重叠时的控件行为。
      PlacementTarget:获取或设置当打开 Popup 控件时该控件相对于其放置的元素。PopupAnimation:获取或设置Popup 控件的打开和关闭动画。
      StaysOpen:获取或设置一个值,该值指示当 Popup 控件焦点不再对准时,是否关闭该控件。
      Popup主要事件为:Opened:当IsOpen 属性更改为 true 时发生。
      fcd2ca20-deee-4bf7-8684-11bc0709ee28-image.png

      发布在 技术答疑 popup控件
      tarao616
      tarao616
    • 数据库技术

      01d0726a-0a2a-4acd-9952-d0f7a5db7ad0-image.png
       数据技术主要有InnoSQL和NTSDB,NTSDB是最近研发的新产品,预计明年将向外推荐此产品,InnoSQL属于MySQL分支方面的研究大概从2011年开始的,InnoSQL的主要目标是提供更好的性能以及高可用性,同时便于DBA的运维以及监控管理。
      8ef408d1-69d3-40a1-b51d-40d76eab63f2-image.png
       RocksDB是以树的形式组织数据的产品,MySQL有一个MyRocks产品,我们内部将其集成到InnoSQL分支上。这样做的原因是公司有很多业务,很多都是利用缓存保持其延迟,其规模会越来越大,这样就导致缓存、内存成本很高;其业务对延迟要求不是特别高,但要保持延迟稳定(小于50毫秒)。

       RocksDB能够很好地将缓存控制的很好,随着缓存越来越大,有的公司会将其放到HBase上,但是其延迟有时波动会很大,如小米HBase很强,但还是做了一个基于K-V模式的缓存处理,主要解决延迟波动问题。我们主要是基于开源产品来解决,如将RocksDB集成起来解决公司业务对延迟稳定的一些需求。

       InnoRocks由于是基于LSM,因此对写入支持非常好,后续有内部测试数据可以展示。还有就是LSM压缩比很高,网易一种是替换缓存,一种是普通数据库存储,目前还是用InnoDB存储,如果用InnoRocks存储会节省很多存储空间;还有一个就是结合DB做扩展,将其集成到公司内部。
      71aea032-d4cc-4aec-8aee-c783f116386b-image.png
       上图是写入对比,是一个普通的写入测试,其主介质是递增型的,对于两个都是一个顺序读写过程;如果要完全对比还要测试RFID写入测试,这样能够明显反应RocksDB和InnoDB的差距。图中RocksDB写入性能比InnoDB要好,读取性能InnoDB性能比RocksDB。300GB原始数据,分别导入到Inno DB(未压缩)和Inno Rocks后的存储容量对比,Inno DB为315GB左右,Inno Rocks为50 ~ 60GB,存储容量是Inno DB的20%到30%。

       InnoRock一般场景是替换InnoDB写入,因为其写入性能、压缩性能更好、成本也更低。另一方面能够解决InnoDB延迟不稳定,替换大量的缓存应用,只要其对相应时间没有特殊要求。

       大量数据写入场景,比如日志、订单等;需要高压缩以便存储更多的数据,Inno DB --> Inno Rocks;对写入延迟波动比较敏感,HBase --> Inno Rocks;相对较低的延迟要求(10 ~ 50ms)下替换缓存场景(延迟<5ms),节省内存成本, Redis --> Inno Rocks。
      433b2e37-45fb-40b3-8049-c2dd163498a9-image.png

      发布在 技术答疑 数据库技术
      tarao616
      tarao616
    • 订单机器状态机

      状态机是有限状态自动机的简称,是现实事物运行规则抽象而成的一个数学模型。
      有限状态机一般都有以下特点:
      第一:可以用状态来描述事物,并且任一时刻,事物总是处于一种状态;
      第二:事物拥有的状态总数是有限的。
      第三:通过触发事物的某些行为,可以导致事物从一种状态过渡到另一种状态;
      第四:事物状态变化是有规则的,A状态可以变换到B,B可以变换到C,A却不一定能变换到C;
      第五:同一种行为,可以将事物从多种状态变成同种状态,但是不能从同种状态变成多种状态。

      状态机这种描述客观世界的方式就是将事物抽象成若干状态,然后所有的事件和规则导致事物在这些状态中游走。最终使得事物“自圆其说”。很多通信协议的开发都必须用到状态机;一个健壮的状态机可以让你的程序,不论发生何种突发事件都不会突然进入一个不可预知的程序分支。
       
      状态机示例:
      503d598b-19ba-4126-b3d7-5ebde6f091a2-image.png
      信息系统是现实世界一种抽象和描述。而业务领域中那些已经发生的事件就是事实,信息系统就是将这些事实以信息的形式存储到数据库中,即:信息就是一组事实

      信息系统就是存储这些事实,对这些事实进行管理与追踪,进而起到提供提高工作效率的作用。
      信息系统就是记录已经发生的事实,信息系统中的状态机基本和事实匹配。即:标识某个事实的完成度。

      业务系统,根据实际业务,具体会有哪些发生的事实需要记录,基本这些事实就至少对应一个状态。需要记录的事实就是一种稳态,一种结果。

      发布在 技术答疑 订单机器状态机
      tarao616
      tarao616
    • 事务的一些操作

      事务的四个ACID特性:

      • 原子性(Atomicity):原子性即这个事务的任务要么全做了,要么全部没做,不能出现做一半这种情况。

      • 一致性Consistency:一致性即数据库中的数据必须满足数据满足数据库的约束。

      • 隔离性Isolation:即事务与事务之间相互不打扰,比如两个事务在实际过程中并不是原子的,两个事务中的语句是交替运行的,但是隔离性就是要保证两个事务之间状态转换不会互相影响。

      • 持久性Durability:就是一旦事务结束,就要将其保存到磁盘中防止丢失。

      • 事务的状态活跃的active:即事务正在运行其中的SQL语句。

      • 部分提交的partially commited:事务执行完成,但是其结果还在内存中保存着,没有刷新到磁盘中。

      • 提交的 commited : 结果成功刷新到磁盘,就从上面部分提交进入该状态。

      • 失败的 failed : 就是事务执行过程出现数据库或操作系统自身的错误,就导致了事务提交失败。中止

      • aborted : 就是事务提交失败,需要将已经修改的语句回滚到事务未执行以前。
        99093374-18eb-4273-a8d7-f2340f7e96fa-image.png

      发布在 技术答疑 事务的一些操作
      tarao616
      tarao616
    • MindSpore中的算子

        算子的调用是构建模型的基础,准确的找到能满足需求的算子并能正确的使用,可以有事半功倍的效果。本次就分享下MindSpore中算子的使用和遇到问题时的解决方法给大家。
      79d7c000-9c2e-4f3a-bcbe-c81022abe924-image.png
        一般情况下在自定义网络模型时会用到各种类型的算子,MindSpore中分为Primitive算子和nn算子,Primitive算子是开放给用户的最低阶算子接口,一个Primitive算子对应一个原语,它封装了底层的Ascend、GPU、AICPU、CPU等多种算子的具体实现,为用户提供基础算子能力。

        还可以继续分为计算算子和框架算子。计算算子主要负责具体的计算,而框架算子主要用于构图,自动微分等功能,都可以从mindspore.ops模块导入使用。同时mindspore.nn模块是对mindspore.ops模块的封装。所以在构建网络模型时建议使用mindspore.nn模块,优点是使用方便,当然如果想要探索更多算子的信息,建议使用mindspore.ops模块。
        需求大致可以分成两种,自定义网络模型时的算子需求和从第三方框架迁移模型时对标算子的需求。

        方法:在mindspore中,可以手动将embedding的padding_idx位置对应的权重初始化为0;并且在训练时通过mask的操作,过滤掉padding_idx位置对应的Loss。MindSpore中与Mask相关的算子有:nn.Dropout、RandomChoicWithMask、NMSWithMask。

        当然即使找到了符合需求的算子,并且单独运行时也没有问题,也不能够避免在加入到自己的项目代码中完全不报错。在算子使用中通常的报错原因是使用的MindSpore版本和参考的教程不一致、算子不支持目前的硬件环境以及传入的参数不符合算子要求,所以为了避免不必要的报错,下面给大家提供几个查看接口的正确姿势:
        根据自己安装的MindSpore版本查找对应版本的接口;第三方模型迁移时建议先通过API映射查找;查看算子是否支持自己的硬件平台以及内存大小;重点:到算子详情页查看参数和参数的类型。

      发布在 技术答疑 mindspore
      tarao616
      tarao616
    • 计算机控制单元的功能

        控制单元是中央处理器(CPU)的子部件,它管理着计算机中所有在这一区域执行的操作。它负责从计算机、指令和数据中获取各种输入,并告诉处理器如何处理它们。由于CPU被认为是计算机的大脑,它有时被称为大脑中的大脑。根据CPU结构的不同,控制单元可能有不同的任务要执行。
      0a0c4b6b-e71f-4122-844e-233b1f8119af-image.png
        什么是指令周期、机器周期和时钟周期?三者有何关系?CPU每取出并执行一条指令所需的全部时间叫指令周期;
      c56eee58-214e-4613-b440-d7c82d91ac9f-image.png
        机器周期是在同步控制的机器中,执行指令周期中一步相对完整的操作(指令步)所需时间,通常安排机器周期长度等于主存周期;

        时钟周期是指计算机主时钟的周期时间,它是计算机运行时最基本的时序单位,对应完成一个微操作所需时间,通常时钟周期等于计算机主频的倒数。

        那么能不能说机器的主频越快,机器的速度就越快,为什么呢?正确的答案是不能说机器的主频越快,机器的速度就越快。原因是因为机器的速度不仅与主频有关,还与数据通路结构、时序分配方案、ALU运算能力、指令功能强弱等多种因素有关,要看综合效果。
      2bd770fe-b2f5-4822-bdaa-3dd227ff8f45-image.png

      发布在 技术答疑 控制单元
      tarao616
      tarao616
    • 如何解构HE2E项目

      首先我们先来了解一下HE2E技术架构图:
      be854668-5e58-4671-8d64-fa7f2ada34df-image.png
      第一步:创建项目:在华为云DevCloud中创建项目时选择DevOps样例项目,即可创建出预置了代码仓库、编译构建、部署等任务的DevOps样例项目,此项目即HE2E项目。
      770458e5-bdec-4b7b-8eef-994759582607-image.png
      代码仓库,HE2E项目中预置了代码仓库phoenix-sample。
      在根目录下可以看到images、kompose、result、vote、worker五个文件夹,以及LICENSE、README.md和docker-compose-standalone、docker-compose两个yml文件。Images文件夹存了几张图片,LICENSE和README也与代码内容无关,docker-compose.yml文件是应用于本地开发时的测试文件。
      在进行代码解构时,对构建任务的部分内容已经进行过分析了,其中就包括如何通过指定Dockerfile文件制作镜像,即docker build(制作)的操作。除此之外,制作XX镜像并推送到SWR的步骤中还包括了推送镜像所需的信息。这里设置了推送区域、组织、镜像名字、镜像标签,其实就是我们进行docker tag(打标签)和docker push(推送)的操作。
      在vote、result、worker的镜像制作并推送的过程中,通过参数BUILDNUMBER定义镜像的版本号。BUILDNUMBER是系统预定义参数,随着构建日期及次数变化。
      worker镜像在制作之前,需要先对worker目录下的工程进行Maven构建,这样就会生成Dockerfile.j2中(制作镜像时)所需的target文件。

      发布在 极客生涯 he2e技术 如何解构he2e项目
      tarao616
      tarao616