原文出自infosecurity
当前,数字化转型的热潮在IT领域发展的如火如荼,越来越多的企业投身其中,机器学习和人工智能等现代技术的融合在公司组织内部也逐渐流行起来。
随着那些构成企业复杂IT基础架构的技术日益成熟,部署云原生环境以及在该环境中使用容器早已成为企业技术轨道中的“家常便饭”。
幸运的是,对于企业所有者而言,Kubernetes和容器部署技术不仅可以与机器学习技术并驾齐驱,而且可以引入到云原生模型中,从而为企业提供良多裨益,包括实施有效的业务策略以及安全性的培养。
当我们谈到机器学习时,你会想到什么?机器的应用场景是多种多样的 -- 从简单的欺诈/网络犯罪侦查,到量身定制的客户体验,再到像供应链优化这样复杂的操作,一切都证明了机器学习能够为企业所带来的丰厚利润。
此外,Gartner的预测进一步证明了机器学习所提供的众多优势,该预测指出,到2021年,70%的企业都将依赖于某种形式的人工智能。
人工智能在业务中的应用
企业若想充分利用人工智能和机器学习,并将其应用于DevOps和DevSecOps等新业务组中,他们必须拥有可靠的IT基础架构。
强大的IT环境能够为数据科学家提供尝试各种数据集、计算模型和算法的环境,而不会影响其他操作,也不会给IT人员造成损失。
为了在业务中有效实现机器学习,企业需要找到一种在本地和云环境中重复部署代码的方法,并建立与所有所需数据源的连接。
对于现代企业而言,时间是帮助他们实现目标的基本工具,因此,他们迫切需要一种支持快速开发代码的IT环境。
说到容器,容器通过将代码及其特定的运行要求打包在“包装”中,从而加快了企业应用程序的部署过程,这一特性使容器成为了企业的理想选择,也因此成为了机器学期和人工智能的理想搭档。
综上所述,基于容器环境下进行的人工智能项目的三个阶段,包括探索、训练模型和部署,是非常有潜力的。每个阶段具体又包括什么呢?下文将对这三个阶段展开说明。
01 探索
在构建AI模型时,数据科学家们遵循的规范是尝试不同的数据集以及各种ML算法,以确定要使用的数据集和算法,以便他们可以提高预测水平效率和准确性。
通常,数据科学家依靠大量的库和框架来为不同行业中的各种情况和问题创建ML模型。当数据科学家们试图发现新的收入来源并努力实现企业的业务目标时,他们还需要具备运行测试并快速执行测试的能力。
尽管AI技术的使用日新月异,但已有数据表明,令数据科学家和工程师使用容器化开发的企业比其竞争者更据优势。
渥太华DevOps工程师Gary Stevens的一份报告指出,加拿大网络托管提供商HostPapa的表现优于其他领先的网络托管提供商,这要归功于它早早地采用了Kubernetes。
在AI或ML项目的探索阶段结合容器,能够使数据团队根据他们的特定领域,自由打包库;相应地部署算法,并根据团队需求明确正确的数据源。
随着基于容器的程序(例如Kubernetes)的成功实施,数据科学家有权访问隔离的环境。这使得他们可以自定义探索过程,而不必在共享环境中管理多个库和框架。
02 模型训练
设计完模型后,数据科学家需要利用大量数据,跨平台训练AI程序,以最大程度地提高模型的准确性,并减少任何人工资源的使用。
考虑到训练AI模型是一项高度计算密集型操作的事情,容器被证明在扩展的工作负荷以及快速与其他节点通信方面非常有利。但是,通常情况下IT团队的成员或调度程序会确定最佳节点。
此外,通过容器进行现代数据管理平台进行数据训练,极大地影响并简化了AI模型中的数据管理流程。此外,数据科学家还具有在多种不同类型的硬件(例如GPU)上运行AI或ML项目的优势,这也使他们能够一直使用那些最具准确性的硬件平台。
03 部署
作为AI项目中最棘手的部分,在机器学习应用程序的生产和部署阶段中可能经常会出现多个ML模型的组合,而每个模型都有其不同的用途。
通过在ML应用程序中结合容器,IT团队可以将每个特定模型部署为单独的微服务。那么,微服务又是什么?微服务是指一个独立的轻量级程序,开发人员能够在其他应用程序中重复使用该程序。
容器不仅为快速部署ML和AI模型提供了一个可移植的、隔离且一致的环境,也拥有可能改变当今IT格局的能力,那就是使企业能够更快更好地实现其目标。
原文链接:
https://www.infosecurity-magazine.com/opinions/kubernetes-containers-machine/
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co
我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返
它不等于主线程的binding,这个toplevel作用域是什么?此作用域与主线程中的binding有何不同?>ruby-e'putsTOPLEVEL_BINDING===binding'false 最佳答案 事实是,TOPLEVEL_BINDING始终引用Binding的预定义全局实例,而Kernel#binding创建的新实例>Binding每次封装当前执行上下文。在顶层,它们都包含相同的绑定(bind),但它们不是同一个对象,您无法使用==或===测试它们的绑定(bind)相等性。putsTOPLEVEL_BINDINGput
我可以得到Infinity和NaNn=9.0/0#=>Infinityn.class#=>Floatm=0/0.0#=>NaNm.class#=>Float但是当我想直接访问Infinity或NaN时:Infinity#=>uninitializedconstantInfinity(NameError)NaN#=>uninitializedconstantNaN(NameError)什么是Infinity和NaN?它们是对象、关键字还是其他东西? 最佳答案 您看到打印为Infinity和NaN的只是Float类的两个特殊实例的字符串
如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion为什么SecureRandom.uuid创建一个唯一的字符串?SecureRandom.uuid#=>"35cb4e30-54e1-49f9-b5ce-4134799eb2c0"SecureRandom.uuid方法创建的字符串从不重复?
我刚刚被困在这个问题上一段时间了。以这个基地为例:moduleTopclassTestendmoduleFooendend稍后,我可以通过这样做在Foo中定义扩展Test的类:moduleTopmoduleFooclassSomeTest但是,如果我尝试通过使用::指定模块来最小化缩进:moduleTop::FooclassFailure这失败了:NameError:uninitializedconstantTop::Foo::Test这是一个错误,还是仅仅是Ruby解析变量名的方式的逻辑结果? 最佳答案 Isthisabug,or