-
区块链技术是通过P2P网络和区块链来实现数据存储的去中心化、不可逆、不可篡改。区块链主要解决的交易的信任和安全问题,因此它针对这个问题提出了四个技术创新:①分布式账本交易记账由分布在不同地方的多个节点共同完成,且每个节点记录的是完整的账本,因此它们都可以参与监督交易合法性,同时可以共同为其作证。传统分布式存储:将数据按照一定规则分成多份进行存储,通过中心节点往其他备份节点同步数据。区块链分布式存储:每个节点都按照块链式结构存储完整的数据,每个节点存储的都是独立的、地位相等的,依靠共识机制保证存储的一致性。没有任何一个节点可以单独记录账本数据,从而避免单一记账人被控制或者贿赂而记假账,也由于节点较多,理论上除非所有节点遭破坏,否则账本不会消失,从而保证账本的数据安全。②非对称加密和授权技术存储在区块链上的交易信息是公开的,但是账户身份是高度加密的,只有在数据拥有者授权的情况下才能访问到,从而保证了数据的安全和个人的隐私。③共识机制 (少数服从多数,人人平等)记账节点之间怎么达成共识,认定一个记录的有效性,既是认定手段,也是防篡改手段,区块链提出四种共识机制,适用于不同的应用场景,在效率和安全性之间取得平衡。少数服从多数:不只是节点数,还有计算能力、股权或者其他计算机可以比较的特征量。人人平等:节点满足条件时,所有节点都有权优先提出共识结果、直接被其他节点认同后并最后有可能成为最终共识结果。基于这些可信和不可篡改的数据,可以自动化的执行一些预先定义好的规则和条款。密码学最开始,比特币更多的是对椭圆曲线公钥密码算法、Ripemd和SHA2数据摘要算法的应用,随着区块链的发展,链上隐私保护成为关注的重点,对称加密、密钥协商、新型密码学技术如环签名、同态加密、零知识证明***(证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的)***、私有账本等开始被广泛应用在隐私保护方案中。1024位的RSA私钥加密已经可以破解。hash算法哈希算法是一个单向函数,可以将任意长度的输入数据转化为固定长度的输出数据(哈希值),哈希值就是这段输入数据唯一的数值表现。由于在计算上不可能找到哈希值相同而输入值不同的字符串,因此两段数据的哈希值相同,就可以认为这两段数据也是相同的,所以哈希算法常被用于对数据进行验证。在区块链中,数据存储在区块里。每个区块都有一个区块头,区块头中存储了一个将该区块所有数据经过哈希算法得到的哈希值,同时,每个区块中还存储了前一个区块的哈希值,这样就形成了区块链。如果想要篡改某一个区块A中的数据,就会导致A的哈希值发生变化,后一个区块B就无法通过哈希值正确地指向A,这样篡改者又必须篡改B中的数据…也就是说,篡改者需要篡改被篡改的区块以及后面的所有区块,才能让所有的节点都接受篡改。私钥就是随机数或坐标,相当于把金子埋在2256个格子的任意一个里,几乎找不到。打款人:A 收款人:BA用B的公钥加密,用自己私钥签名B用自己私钥解密,用A公钥验证Merkle树Merkle树是一种树形结构,在区块链中,Merkle树的叶子节点是区块中数据的哈希值,非叶子节点是其子结点组合后的哈希值,这样由叶子节点开始逐层往上计算,最终形成一个Merkle根,记录在区块的头部,这样就可以保证每一笔交易都无法篡改。非对称加密私钥加密,公钥解密。在区块链中,非对称加密技术主要用于信息加密、数字签名和登录认证。主要目的不是解密,而是对文件来源的验证,而且,即使文件遭恶意篡改,再用公钥解密,就是无效的,由此可证明信息被改过了,并不是原文件,用这种方式使用公私钥可以证明信息的来源并且有不可否定的特性。只有非对称加密才能 实现不可否认性,但速度较慢且大量使用电力资源及计算资源。RSA加密算法RSA的安全基于大数分解的难度。其公钥和私钥是一对大素数(100到200位十进制数或更大)的函数。从一个公钥和密文恢复出明文的难度,等价于分解两个大素数之积(这是公认的数学难题)。第一步:生成密钥对,即公钥和私钥。①随机找两个质数P和Q,P与Q越大越安全。②计算n的欧拉函数φ(n)。φ(n)表示在小于等于n的正整数中,与n构成互质关系的数的个数(两个整数只有公约数1时,它们的关系叫做互质)。如果n=PQ,P与Q均为质数,则φ(n) = φ(PQ) = φ(P-1)φ(Q-1) = (P-1)(Q-1)③随机选择一个整数e,条件是1 < e < m,且e与m互质。④有一个整数d,可以使得e*d除以m的余数为1。第二步:*加密生成密文。*甲向乙发送消息,将密文以utf-8方式编码再转成十进制形成明文(例如“中”以utf-8方式编码为[e4 b8 ad],转为十进制为[228,184,173],则明文为[228,184,173]),甲要使用公钥(n , e)进行加密,要求被加密的数字必须小于n,被加密的数字必须是整数,字符串可以取ASCII或unicode值。假设a为明文,b为密文,按下列公式计算出b,ae% n = b*解密生成明文。*乙收到密文用自己的私钥(n,d)解密,解密公式如下,ad % n = b密文解密后再按utf-8解码为原消息。对极大整数做因数分解的难度决定了RSA算法的可靠性。椭圆曲线加密算法(ECC) 是一种基于椭圆曲线数学的公开密钥加密算法,其本质是利用离散对数问题实现加密,相比于RSA,ECC的优势是可以使用更短的密钥,来实现与RSA相当或者更高的安全(例如,一个256 bit的对称密钥必须由大于15 000 bit 的 RSA 来保护,然而,仅用512 bit的ECC非对称密钥就可以提供相等的安全性,因而可有效节约计算成本)。据研究,160位ECC加密安全性相当于1024位RSA加密,210位ECC加密安全性相当于2048位RSA加密,但是缺点是设计困难,实现复杂,如果序列号设计过短,那么安全性并没有想象中完善。(更适用于资源受限的边缘设备)
-
尚海峰 华为云Stack总裁2010年加入华为,历任华为虚拟化产品总监、云平台研发&市场总监、分布式存储产品总监、分布式存储领域总裁,带领华为分布式存储实现中国区市场份额第一和全球市场规模突破。2021年至今,担任华为云副总裁、华为云Stack总裁,全面负责华为云面向政企市场的业务。提升数字化韧性,拥抱数字化转型过去的20年,是消费互联网发展的高光时刻,互联网和移动互联网先后引领了IT产业的两波浪潮,其迸发的强大生产力持续影响着我们的生活。近几年,随着数字技术与行业的深度结合,产业互联网开始成为新焦点。在这一波新的数字化浪潮里,政企成为了主角,他们以开放的心态拥抱数字技术,深耕数字化转型。今天,所有的行业都在谈数字化转型,数字化转型的终点在哪里?标准是什么?成了困扰众多CIO的问题。也有人说数字化转型就像盲人摸象,不同的人心中有不同的答案。举两个这两年感触较深的政企数字化转型的例子:在深圳,与5G + AI结合的气象预报,已经可以实现1公里范围、4小时以内更精准的天气预测,降低灾害风险;最近,上海的城市最小管理单元很火,通过把物理世界投射到数字世界,以数字化感知万物,政府摸索出了一条未来城市治理的数字化之路。此外,科技抗疫、复工复产、智慧物流等领域,无论是政府还是企业都认识到了数字化转型的必要性和急迫性,利用数字化的技术,提升自身应对不确定性的能力。我非常赞同IDC提出的“数字化韧性”这个说法,政企数字化进程需要构建适应业务中断所带来的影响并快速恢复的能力,并能够在不断变化的环境中保持业务的增长与创新,我认为这是政企数字化转型的重要目标和成功与否的衡量标准。与云携手,加速数字化转型中国政企的数字化转型经历了一段时间的发展,已积蓄一股强大的力量。在即将来到的数字化转型深化和智能升级变革里,云和AI将成为重要的生产工具,为各行各业注入新动能。近年来,政企上云一直如火如荼地在开展。从传统的On Premise到Cloud-Based作为云化的第一阶段实现了数据的集中化,资源利用率得到极大提升。这个阶段大家重点关注的是应用如何在不改造的情况下实现平移上云。随着云化的深入,今天我们已经进入智能升级的新阶段, 即Cloud-Native云原生的阶段。这个阶段以应用为中心,业务生于云、长于云,激发云上创新。但云原生不是一蹴而就的,尤其对政企来说更需要兼顾历史与未来。不同行业、不同阶段的需求不尽相同。那么政企迈向智能升级的新阶段,到底需要一朵什么样的云?值得所有行业深入思考。我们沿着政企客户云化的路径来看,基础设施全面云化、数据全面智能化和应用全面现代化这三个层面,用户面临哪些问题和矛盾:平滑入云,推进基础设施全面云化在众多的政企CIO看来,云化初期关注点主要在如何平滑上云,他们希望既享受云的便利、又不带来额外的负担。比如,云管理平台要匹配当前多层级的复杂组织架构,避免对运营和运维体系带来太大改变;长远看,政企对云的信心持续增长,核心业务入云势不可挡,因此云基础设施还要为包括关键业务在内的业务全面云化提供稳定可靠的保障,确保核心业务永远在线。大数据与AI普惠,驱动数据全面智能化多样性数据时代来临,数据作为核心生产资料,它的价值需要更实时、更智能的手段进行挖掘。如何让多样性、多地域的海量数据焕发新生,政企希望更强大的大数据能力以全面释放数据活力,同时让AI真正落地生根、成为新的生产力,从而提升运营效率和经营产出,驱动全流程的智能化变革。云原生,引领应用全面现代化应用和IT架构持续迭代,相互促进保证业务和基础设施持续的创新力。政企希望基于云原生的能力提升业务敏捷性,以模块化、灵活的服务模块加速新特性开发,加快产品上市以获得市场先机。除了这三个阶段的诉求外,我还想额外补充一点。大量的实践证明,政企云平台从构思到落地,是一个漫长的过程,建云、上云和用云每一步都是一个复杂的系统工程,面临着无数未知挑战。此时,选择一个有丰富云化经验并且懂行的伙伴对政企来说显得格外重要。做一朵更懂政企的云,深耕数字化转型华为一路走来,经历了最初的分散型企业IT、集中化IT、国际化IT和基于云模式的IT,目前我们正全面推进“Digital First”的数字化战略。在这个过程中,华为云作为华为数字化转型的“底座”,通过华为历次的数字化变革项目,沉淀了大量的实践经验和产品解决方案能力,我们希望把这些能力释放出来,帮助更多行业加速数字化转型。华为云Stack基于云边端协同的架构同步华为云的创新能力,匹配政企从On Cloud入云到In Cloud用云的路径和核心诉求,通过本地化部署满足政企的合规要求,加速政企智能升级和业务创新,致力于成为一朵更懂政企的云,与用户一起深耕数字化转型。如何做一朵更懂政企的云?华为依托多年政企行业的理解,从四个方向战略投入:打造坚实基座、推进数据智能、加速应用敏捷、提供卓越服务,并推出一系列产品和解决方案,使能政企从上云到云上创新。坚实基座,支撑关键业务全面入云云基础设施是云平台的底座,政企要实现全面云化的目标首先需要一个坚实的基座。我们提出了四个“多”,即多元算力、多云协同、多域容灾和多级云管:多元算力即一云多芯、一云多池,我们充分考虑用户的现网情况,支持多厂商、多CPU架构和多虚拟化形态平滑入云;基于云联邦2.0的多云协同,为跨多地、多厂商的公有云提供统一入口,帮助用户快速构建混合云;数据库、ERP等核心业务上云是政企基础设施全面云化的最后一公里,也是最难的一步,需要考虑现有的架构如何平滑入云,为此我们打造了业界唯一多地域、全场景、租户自助的容灾解决方案,实现核心业务无改造上云,降低全面云化的成本,保证业务永远在线;针对大型政企多级管理架构适配难度大、存量资源池共存的现状,我们推出了运营、运维和服务“三位一体”的统一云管能力。支持最多五级的管理架构,充分适配众多大型政企的多级组织架构的特点。智能数据,激发数据新价值在数据领域,我们看到两个大的趋势,一是分析实时化,二是生产智能化。数据湖是海量数据分析的一个重要手段,它正在从离线数据湖向实时、逻辑数据湖方向发展。华为云Stack提出了湖仓一体的理念,基于HetuEngine打造逻辑数据湖,实现湖和仓的协同,跨源、跨域、跨仓的数据协同分析,无需数据迁移,效率提升50%以上。围绕日益增长的海量数据实时处理的需求,我们还构建了实时数据湖,实现全链路的实时分析和T+0的入库周期,让数据价值更及时地呈现。为了将智能引入生产环节,华为云Stack推出了AI的能力,在华为公有云上训练的模型快速推送到本地,可以直接提供在线服务和批量推理能力,也可以再推送到边缘和端侧,让边缘和端侧变得更智能。以国家电网为例,他们基于数据湖已经将用电计费入库的时间从4小时降低到了5分钟,同时还打造了云边协同的AI智能巡检,通过减少人工巡检提升巡检效率,逐步迈向智能化生产与运营。敏捷应用,重塑应用价值传统核心交易系统通常是基于大机架构,存在如建设周期长、成本高、扩展难度大等诸多问题,尤其是随着互联网新业务的快速发展,这些挑战更加凸显。因此基于分布式技术建设开放的核心平台成为金融行业新趋势。华为全栈分布式新核心解决方案,基于GaussDB分布式数据库替代传统数据库,在提供金融级高可用的同时,实现更好的扩展性,可以达到1000+节点扩展能力和PB级单库容量。通过ROMA微服务治理能力及分布式消息、分布式事务等一系列分布式中间件,对应用进行微服务和分布式改造,打造生态开放、架构灵活的方案,为核心业务系统提供更好的选择。传统应用向分布式和云原生演进是长期的过程,华为提出“立而不破、渐进演进”的理念。新老应用、数据要能有机协同起来,在一朵云里渐进式的发展,而非互联网厂商常说的破坏式创新,更符合政企的实际情况。基于ROMA可以充分重用现有系统业务功能,帮助企业优化业务流程,走上以业务和应用为中心的敏捷道路,重塑应用的商业价值。卓越服务,安心上云用云我们持续积累包括蓝图顶设、规划建设以及运维运营在内的专业服务能力,结合全球一站式服务布局和专家体系,让用户安心上云用云。随着政企进入全面云化的阶段,云平台的规模快速扩大,运维面临包括人员技能、运维流程、运维工具和经验在内的多方面挑战。这个背景下,远程集中运维成为业界的新趋势,用户将运维工作全部远程托管给云厂商,让更专业的运维团队提供24小时服务。为了匹配远程运维趋势、更好地服务用户和提升运维体验,我们建设了华为云Stack全球运维中心西安核心节点,这是我们全球四大运维中心之首,将负责中国区华为云Stack局点的远程运维和技术支持。它将华为专业的运维人员、成熟的运维体系、领先的运维能力全面开放,让用户的技术人员可以进一步聚焦业务创新,推动云计算产业更加良性健康发展。▲华为云(西安)运维中心揭牌仪式数字化转型只有起点、没有终点;政企的数字化韧性,没有最强、只有更强。大型政企的数字化时代序幕已经拉开,数字化转型不再是“锦上添花”,而是在日益复杂的竞争中存活的必然选择。华为云Stack希望做一朵更懂政企的云,把智能带给每个城市、每个企业,成就数字化未来。
-
什么是云计算呢? 其实云端(cloud)就代表了互联网(Internet),通过网络的计算能力,取代使用你原本安装在自己电脑上的软件,或者是取代原本你把资料存在自己硬盘的动作,你转而通过网络来进行各种工作,并存放档案资料在网络,也就是庞大的虚拟空间上。我们通过所使用的网络服务,把资料存放在网络上的服务器中,并借由浏览器浏览这些服务的网页,使用上面的界面进行各种计算和工作。 在云计算中,服务器并不会管你电脑的计算能量有多强。有的同事在办公室用PC连上Google Docs,在家则是用Apple MacBook,同时还有很多其他的服务可以通过你的手机或iPhone与Android平台手机上的应用软件来完成。 你可以在任何一台电脑上登入使用云端服务,而一个朋友或同事也可以登入并和你一起在一样的文件上工作。Google Docs只是能够协同操作的一种办公室型态云计算服务。有些服务甚至还可以让人在全球不同的地点登入服务并同时在一样的文件上工作。 云计算也许听起来很棒,但是它还是有一些隐忧的,也是你在使用时必须要考虑的地方。正如同开放源代码阵营名人Richard Stallman指出的,你的资料是在第三方厂商的手上,而且是在你控制以外的。 最有可能遇到的问题是安全性,鲜少有公司会想窃取你的资料并做出无耻的网站设计,但最好还是研究一下各种网站和网络服务,找一些可信赖的专家推荐的。 幸运的是,一点点常识和一些简单的正确电脑操作练习可以将这类安全性失误的影响降至最低,避免将你的机密资料放在云端上,如果你真的放了,例如利用网上银行时,避免在网咖、学校或图书馆内的公用电脑上进行,也别太随便给出自己真正的联络资料,避免每个帐号都使用同一个密码,就算只更改一个字母也好。 云计算第二个主要问题是可能暂时故障导致你无法使用某项服务,你可能把资料放在某个网站上而这个网站却因服务器故障导致某一段时间无法进入,Twitter就因偶发性挂点而恶名昭彰,每次它的网站挂掉时就会出现“掉落的鲸鱼”图案, 更糟的是,你有可能因此而遗失全部的资料。 最糟、最糟的情况是,当你想搜索自己在云端上的资料时却发现“情空中万里无云”,如果你想野餐这当然是好事,但如果是这个为你保管资料的公司突然关门大吉,可就大事不妙了。 如果你还没有备份自己的资料,你真的应该开始备份了。如果你不信邪,用iTunes就好了,但如果你信邪而且开始备份这些资料,就一直备份下去吧...想想要把全部的CD都跑过一次要花上多少时间(如果你还保有它们的话),更别提那些你借来的CD或是已经购买的MP3。 想像一下明早你醒来时发现它们全部不见了,至少你还有音乐可以听,但如果遗失的是你的生日或婚礼或在瑞典穿着日本浴衣驾驶拖拉机的照片,那可能反而是件好事。对于到底什么是云计算,至少可以找到100种解释。目前广为接受的是中国云计算专家咨询委员会副主任、秘书长刘鹏教授给出的定义:“云计算是通过网络提供可伸缩的廉价的分布式计算能力。” 从技术上看,大数据与云计算的关系就像一枚硬币的正反面一样密不可分。大数据必然无法用单台的计算机进行处理,必须采用分布式计算架构。它的特色在于对海量数据的挖掘,但它必须依托云计算的分布式处理、分布式数据库、云存储和虚拟化技术。 云计算是一种商业计算模型,它将计算任务分布在大量计算机构成的资源池上,使用户能够按需获取计算力、存储空间和信息服务。 这种资源池称为“云”。“云”是一些可以自我维护和管理的虚拟计算资源,通常是一些大型服务器集群,包括计算服务器、存储服务器和宽带资源等。云计算将计算资源集中起来,并通过专门软件实现自动管理,无需人为参与。用户可以动态申请部分资源,支持各种应用程序的运转,无需为繁琐的细节而烦恼,能够更加专注于自己的业务,有利于提高效率、降低成本和技术创新。云计算的核心理念是资源池,这与早在2002年就提出的网格计算池(Computing Pool)的概念非常相似。网格计算池将计算和存储资源虚拟成为一个可以任意组合分配的集合,池的规模可以动态扩展,分配给用户的处理能力可以动态回收重用。这种模式能够大大提高资源的利用率,提升平台的服务质量。 之所以称为“云”,是因为它在某些方面具有现实中云的特征:云一般都较大;云的规模可以动态伸缩,它的边界是模糊的;云在空中飘忽不定,无法也无需确定它的具体位置,但它确实存在于某处。之所以称为“云”,还因为云计算的鼻祖之一Amazon公司将大家曾经称为网格计算的东西,取了一个新名称“弹性计算云”(Elastic Computing Cloud),并取得了商业上的成功。 这里描述的云的建立过程和结构,只是一种比较普通和容易理解的形式。由于技术的不同、实现方式的不同,各家云的实现方式和结构会有很大的不同。但是,一些基本的概念是相同的,其共同的核心要点包括: 一定要有资源池。把分散的计算资源集中到大的资源池里,以方便统一管理和分配。例如前面讲的D所管理的资源池。 按需分配、自助服务。用户实际消耗多少资源,就被分配多少资源;用户对自己得到的资源能够自助管理。例如前面讲的“机房”。 灵活的资源变化。随便撤掉一台硬件的电脑,其上面的信息和活动会自动转移到别处去;随便增加一台电脑,其资源会随时添加到资源池里去。所有这些增减,用户根本意识不到。例如前面讲的“配载调配和平衡”。 一定要有记账系统。用户消耗了多少资源,如何给这些资源计费,系统有详尽的信息采集和报告,以便对用户收费(即使是免费,也得有详细的记账)。例如前面提到用户输入信用卡,就是以记账为前提。 在组建云的技术上,说到底,就是用软件产品(如前面提到的C和D,并通过监控程序)来管理、组织、和分配经过抽象或虚拟的硬件计算资源。除了个别企业用自己的技术建设、和服务外,现在常见的云技术提供者主要有:VMware、微软、Citrix、和OpenStack等。前两者是完全的商业产品;Citrix公司在监控程序上采用的是开源的Xen;OpenStack则完全是开源免费的,它的监控程序主要采用开源的KVM和Xen,也可以是其它的开源软件。 按照服务的对象和范围,云可以分为三类: 私有云:建一个云,如果只是为了单位(企业或机构)自己使用,就是私有云。就前面提到的“机房”而言,每个“机房”只是为本单位的不同部门、或不同用途而设立的。 公众云:如果云的服务对象是社会上的客户,就是公众云。前面提到的“机房”可以是任何社会上的企业、单位、或个人。Amazon公司的AWS是现在世界上最大的公众云。其它公众云提供商还有Google、Salesforce、苹果的iCloud等等。 混合云:如果一个云,既是为单位自己使用,也对外开放资源服务,就是混合云。有时,把两个或多个私有云的联合,也叫混合云。 “云计算”的五大特点大规模、分布式“云”一般具有相当的规模,一些知名的云供应商如Google云计算、Amazon、IBM、微软、阿里等也都拥能拥有上百万级的服务器规模。而依靠这些分布式的服务器所构建起来的“云”能够为使用者提供前所未有的计算能力。虚拟化云计算都会采用虚拟化技术,用户并不需要关注具体的硬件实体,只需要选择一家云服务提供商,注册一个账号,登陆到它们的云控制台,去购买和配置你需要的服务(比如 云服务器,云存储,CDN等等),再为你的应用做一些简单的配置之后,你就可以让你的应用对外服务了,这比传统的在企业的数据中心去部署一套应用要简单方便得多。而且你可以随时随地通过你的PC或移动设备来控制你的资源,这就好像是云服务商为每一个用户都提供了一个IDC(Internet Data Center)一样。高可用性和扩展性那些知名的云计算供应商一般都会采用数据多副本容错、计算节点同构可互换等措施来保障服务的高可靠性。基于云服务的应用可以持续对外提供服务(7*24小时),另外“云”的规模可以动态伸缩,来满足应用和用户规模增长的需要。按需服务,更加经济用户可以根据自己的需要来购买服务,甚至可以按使用量来进行精确计费。这能大大节省IT成本,而资源的整体利用率也将得到明显的改善。安全网络安全已经成为所有企业或个人创业者必须面对的问题,企业的IT团队或个人很难应对那些来自网络的恶意攻击,而使用云服务则可以借助更专业的安全团队来有效降低安全风险。
-
什么是云计算呢? 其实云端(cloud)就代表了互联网(Internet),通过网络的计算能力,取代使用你原本安装在自己电脑上的软件,或者是取代原本你把资料存在自己硬盘的动作,你转而通过网络来进行各种工作,并存放档案资料在网络,也就是庞大的虚拟空间上。我们通过所使用的网络服务,把资料存放在网络上的服务器中,并借由浏览器浏览这些服务的网页,使用上面的界面进行各种计算和工作。 在云计算中,服务器并不会管你电脑的计算能量有多强。有的同事在办公室用PC连上Google Docs,在家则是用Apple MacBook,同时还有很多其他的服务可以通过你的手机或iPhone与Android平台手机上的应用软件来完成。 你可以在任何一台电脑上登入使用云端服务,而一个朋友或同事也可以登入并和你一起在一样的文件上工作。Google Docs只是能够协同操作的一种办公室型态云计算服务。有些服务甚至还可以让人在全球不同的地点登入服务并同时在一样的文件上工作。 云计算也许听起来很棒,但是它还是有一些隐忧的,也是你在使用时必须要考虑的地方。正如同开放源代码阵营名人Richard Stallman指出的,你的资料是在第三方厂商的手上,而且是在你控制以外的。 最有可能遇到的问题是安全性,鲜少有公司会想窃取你的资料并做出无耻的网站设计,但最好还是研究一下各种网站和网络服务,找一些可信赖的专家推荐的。 幸运的是,一点点常识和一些简单的正确电脑操作练习可以将这类安全性失误的影响降至最低,避免将你的机密资料放在云端上,如果你真的放了,例如利用网上银行时,避免在网咖、学校或图书馆内的公用电脑上进行,也别太随便给出自己真正的联络资料,避免每个帐号都使用同一个密码,就算只更改一个字母也好。 云计算第二个主要问题是可能暂时故障导致你无法使用某项服务,你可能把资料放在某个网站上而这个网站却因服务器故障导致某一段时间无法进入,Twitter就因偶发性挂点而恶名昭彰,每次它的网站挂掉时就会出现“掉落的鲸鱼”图案, 更糟的是,你有可能因此而遗失全部的资料。 最糟、最糟的情况是,当你想搜索自己在云端上的资料时却发现“情空中万里无云”,如果你想野餐这当然是好事,但如果是这个为你保管资料的公司突然关门大吉,可就大事不妙了。 如果你还没有备份自己的资料,你真的应该开始备份了。如果你不信邪,用iTunes就好了,但如果你信邪而且开始备份这些资料,就一直备份下去吧...想想要把全部的CD都跑过一次要花上多少时间(如果你还保有它们的话),更别提那些你借来的CD或是已经购买的MP3。 想像一下明早你醒来时发现它们全部不见了,至少你还有音乐可以听,但如果遗失的是你的生日或婚礼或在瑞典穿着日本浴衣驾驶拖拉机的照片,那可能反而是件好事。对于到底什么是云计算,至少可以找到100种解释。目前广为接受的是中国云计算专家咨询委员会副主任、秘书长刘鹏教授给出的定义:“云计算是通过网络提供可伸缩的廉价的分布式计算能力。” 从技术上看,大数据与云计算的关系就像一枚硬币的正反面一样密不可分。大数据必然无法用单台的计算机进行处理,必须采用分布式计算架构。它的特色在于对海量数据的挖掘,但它必须依托云计算的分布式处理、分布式数据库、云存储和虚拟化技术。 云计算是一种商业计算模型,它将计算任务分布在大量计算机构成的资源池上,使用户能够按需获取计算力、存储空间和信息服务。 这种资源池称为“云”。“云”是一些可以自我维护和管理的虚拟计算资源,通常是一些大型服务器集群,包括计算服务器、存储服务器和宽带资源等。云计算将计算资源集中起来,并通过专门软件实现自动管理,无需人为参与。用户可以动态申请部分资源,支持各种应用程序的运转,无需为繁琐的细节而烦恼,能够更加专注于自己的业务,有利于提高效率、降低成本和技术创新。云计算的核心理念是资源池,这与早在2002年就提出的网格计算池(Computing Pool)的概念非常相似。网格计算池将计算和存储资源虚拟成为一个可以任意组合分配的集合,池的规模可以动态扩展,分配给用户的处理能力可以动态回收重用。这种模式能够大大提高资源的利用率,提升平台的服务质量。 之所以称为“云”,是因为它在某些方面具有现实中云的特征:云一般都较大;云的规模可以动态伸缩,它的边界是模糊的;云在空中飘忽不定,无法也无需确定它的具体位置,但它确实存在于某处。之所以称为“云”,还因为云计算的鼻祖之一Amazon公司将大家曾经称为网格计算的东西,取了一个新名称“弹性计算云”(Elastic Computing Cloud),并取得了商业上的成功。 这里描述的云的建立过程和结构,只是一种比较普通和容易理解的形式。由于技术的不同、实现方式的不同,各家云的实现方式和结构会有很大的不同。但是,一些基本的概念是相同的,其共同的核心要点包括: 一定要有资源池。把分散的计算资源集中到大的资源池里,以方便统一管理和分配。例如前面讲的D所管理的资源池。 按需分配、自助服务。用户实际消耗多少资源,就被分配多少资源;用户对自己得到的资源能够自助管理。例如前面讲的“机房”。 灵活的资源变化。随便撤掉一台硬件的电脑,其上面的信息和活动会自动转移到别处去;随便增加一台电脑,其资源会随时添加到资源池里去。所有这些增减,用户根本意识不到。例如前面讲的“配载调配和平衡”。 一定要有记账系统。用户消耗了多少资源,如何给这些资源计费,系统有详尽的信息采集和报告,以便对用户收费(即使是免费,也得有详细的记账)。例如前面提到用户输入信用卡,就是以记账为前提。 在组建云的技术上,说到底,就是用软件产品(如前面提到的C和D,并通过监控程序)来管理、组织、和分配经过抽象或虚拟的硬件计算资源。除了个别企业用自己的技术建设、和服务外,现在常见的云技术提供者主要有:VMware、微软、Citrix、和OpenStack等。前两者是完全的商业产品;Citrix公司在监控程序上采用的是开源的Xen;OpenStack则完全是开源免费的,它的监控程序主要采用开源的KVM和Xen,也可以是其它的开源软件。 按照服务的对象和范围,云可以分为三类: 私有云:建一个云,如果只是为了单位(企业或机构)自己使用,就是私有云。就前面提到的“机房”而言,每个“机房”只是为本单位的不同部门、或不同用途而设立的。 公众云:如果云的服务对象是社会上的客户,就是公众云。前面提到的“机房”可以是任何社会上的企业、单位、或个人。Amazon公司的AWS是现在世界上最大的公众云。其它公众云提供商还有Google、Salesforce、苹果的iCloud等等。 混合云:如果一个云,既是为单位自己使用,也对外开放资源服务,就是混合云。有时,把两个或多个私有云的联合,也叫混合云。 “云计算”的五大特点大规模、分布式“云”一般具有相当的规模,一些知名的云供应商如Google云计算、Amazon、IBM、微软、阿里等也都拥能拥有上百万级的服务器规模。而依靠这些分布式的服务器所构建起来的“云”能够为使用者提供前所未有的计算能力。虚拟化云计算都会采用虚拟化技术,用户并不需要关注具体的硬件实体,只需要选择一家云服务提供商,注册一个账号,登陆到它们的云控制台,去购买和配置你需要的服务(比如 云服务器,云存储,CDN等等),再为你的应用做一些简单的配置之后,你就可以让你的应用对外服务了,这比传统的在企业的数据中心去部署一套应用要简单方便得多。而且你可以随时随地通过你的PC或移动设备来控制你的资源,这就好像是云服务商为每一个用户都提供了一个IDC(Internet Data Center)一样。高可用性和扩展性那些知名的云计算供应商一般都会采用数据多副本容错、计算节点同构可互换等措施来保障服务的高可靠性。基于云服务的应用可以持续对外提供服务(7*24小时),另外“云”的规模可以动态伸缩,来满足应用和用户规模增长的需要。按需服务,更加经济用户可以根据自己的需要来购买服务,甚至可以按使用量来进行精确计费。这能大大节省IT成本,而资源的整体利用率也将得到明显的改善。安全网络安全已经成为所有企业或个人创业者必须面对的问题,企业的IT团队或个人很难应对那些来自网络的恶意攻击,而使用云服务则可以借助更专业的安全团队来有效降低安全风险。
-
云计算的“横空出世”让很多人将其视为一项全新的技术,但事实上它的雏形已出现多年,只是最近几年才开始取得相对较快的发展。确切地说,云计算是大规模分布式计算技术及其配套商业模式演进的产物,它的发展主要有赖于虚拟化、分布式数据存储、数据管理、编程模式、信息安全等各项技术、产品的共同发展。近些年来,托管、后向收费、按需交付等商业模式的演进也加速了云计算市场的转折。云计算不仅改变了信息提供的方式,也颠覆了传统ICT系统的交付模式。与其说云计算是技术的创新,不如说云计算是思维和商业模式的转变。下面详细谈一谈云计算的核心技术。云计算是一种以数据和处理能力为中心的密集型计算模式,它融合了多项ICT技术,是传统技术“平滑演进”的产物。其中以虚拟化技术、分布式数据存储技术、编程模型、大规模数据管理技术、分布式资源管理、信息安全、云计算平台管理技术、绿色节能技术最为关键。1、虚拟化技术虚拟化是云计算最重要的核心技术之一,它为云计算服务提供基础架构层面的支撑,是ICT服务快速走向云计算的最主要驱动力。可以说,没有虚拟化技术也就没有云计算服务的落地与成功。随着云计算应用的持续升温,业内对虚拟化技术的重视也提到了一个新的高度。与此同时,我们的调查发现,很多人对云计算和虚拟化的认识都存在误区,认为云计算就是虚拟化。事实上并非如此,虚拟化是云计算的重要组成部分但不是全部。从技术上讲,虚拟化是一种在软件中仿真计算机硬件,以虚拟资源为用户提供服务的计算形式。旨在合理调配计算机资源,使其更高效地提供服务。它把应用系统各硬件间的物理划分打破,从而实现架构的动态化,实现物理资源的集中管理和使用。虚拟化的最大好处是增强系统的弹性和灵活性,降低成本、改进服务、提高资源利用效率。从表现形式上看,虚拟化又分两种应用模式。一是将一台性能强大的服务器虚拟成多个独立的小服务器,服务不同的用户。二是将多个服务器虚拟成一个强大的服务器,完成特定的功能。这两种模式的核心都是统一管理,动态分配资源,提高资源利用率。在云计算中,这两种模式都有比较多的应用。2、分布式数据存储技术云计算的另一大优势就是能够快速、高效地处理海量数据。在数据爆炸的今天,这一点至关重要。为了保证数据的高可靠性,云计算通常会采用分布式存储技术,将数据存储在不同的物理设备中。这种模式不仅摆脱了硬件设备的限制,同时扩展性更好,能够快速响应用户需求的变化。分布式存储与传统的网络存储并不完全一样,传统的网络存储系统采用集中的存储服务器存放所有数据,存储服务器成为系统性能的瓶颈,不能满足大规模存储应用的需要。分布式网络存储系统采用可扩展的系统结构,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,它不但提高了系统的可靠性、可用性和存取效率,还易于扩展。在当前的云计算领域,Google的GFS和Hadoop开发的开源系统HDFS是比较流行的两种云计算分布式存储系统。GFS(Google File System)技术:谷歌的非开源的GFS(GoogleFile System) 云计算平台满足大量用户的需求,并行地为大量用户提供服务。使得云计算的数据存储技术具有了高吞吐率和高传输率的特点。HDFS(Hadoop Distributed File System)技术:大部分ICT厂商,包括Yahoo、Intel的“云”计划采用的都是HDFS的数据存储技术。未来的发展将集中在超大规模的数据存储、数据加密和安全性保证、以及继续提高I/O速率等方面。3、编程模式从本质上讲,云计算是一个多用户、多任务、支持并发处理的系统。高效、简捷、快速是其核心理念,它旨在通过网络把强大的服务器计算资源方便地分发到终端用户手中,同时保证低成本和良好的用户体验。在这个过程中,编程模式的选择至关重要。云计算项目中分布式并行编程模式将被广泛采用。分布式并行编程模式创立的初衷是更高效地利用软、硬件资源,让用户更快速、更简单地使用应用或服务。在分布式并行编程模式中,后台复杂的任务处理和资源调度对于用户来说是透明的,这样用户体验能够大大提升。MapReduce是当前云计算主流并行编程模式之一。MapReduce模式将任务自动分成多个子任务,通过Map和Reduce两步实现任务在大规模计算节点中的高度与分配。MapReduce是Google开发的java、Python、C++编程模型,主要用于大规模数据集(大于1TB)的并行运算。MapReduce模式的思想是将要执行的问题分解成Map(映射)和Reduce(化简)的方式,先通过Map程序将数据切割成不相关的区块,分配(调度)给大量计算机处理,达到分布式运算的效果,再通过Reduce程序将结果汇整输出。4、大规模数据管理处理海量数据是云计算的一大优势。那么如何处理则涉及到很多层面的东西,因此高效的数据处理技术也是云计算不可或缺的核心技术之一。对于云计算来说,数据管理面临巨大的挑战。云计算不仅要保证数据的存储和访问,还要能够对海量数据进行特定的检索和分析。由于云计算需要对海量的分布式数据进行处理、分析,因此,数据管理技术必需能够高效的管理大量的数据。Google的BT(BigTable)数据管理技术和Hadoop团队开发的开源数据管理模块HBase是业界比较典型的大规模数据管理技术。BT(BigTable)数据管理技术:BigTable是非关系的数据库,是一个分布式的、持久化存储的多维度排序Map.BigTable建立在 GFS, Scheduler, Lock Service和MapReduce之上,与传统的关系数据库不同,它把所有数据都作为对象来处理,形成一个巨大的表格,用来分布存储大规模结构化数据。 Bigtable的设计目的是可靠的处理PB级别的数据,并且能够部署到上千台机器上。开源数据管理模块HBase:HBase是Apache的Hadoop项目的子项目,定位于分布式、面向列的开源数据库。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。作为高可靠性分布式存储系统,HBase在性能和可伸缩方面都有比较好的表现。利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。5、分布式资源管理云计算采用了分布式存储技术存储数据,那么自然要引入分布式资源管理技术。在多节点的并发执行环境中,各个节点的状态需要同步,并且在单个节点出现故障时,系统需要有效的机制保证其它节点不受影响。而分布式资源管理系统恰是这样的技术,它是保证系统状态的关键。另外,云计算系统所处理的资源往往非常庞大,少则几百台服务器,多则上万台,同时可能跨跃多个地域。且云平台中运行的应用也是数以千计,如何有效地管理这批资源,保证它们正常提供服务,需要强大的技术支撑。因此,分布式资源管理技术的重要性可想而知。全球各大云计算方案/服务提供商们都在积极开展相关技术的研发工作。其中Google内部使用的Borg技术很受业内称道。另外,微软、IBM、Oracle/Sun等云计算巨头都有相应解决方案提出。6、信息安全调查数据表明,安全已经成为阻碍云计算发展的最主要原因之一。数据显示,32%已经使用云计算的组织和45%尚未使用云计算的组织的ICT管理将云安全作为进一步部署云的最大障碍。因此,要想保证云计算能够长期稳定、快速发展,安全是首要需要解决的问题。事实上,云计算安全也不是新问题,传统互联网存在同样的问题。只是云计算出现以后,安全问题变得更加突出。在云计算体系中,安全涉及到很多层面,包括网络安全、服务器安全、软件安全、系统安全等等。因此,有分析师认为,云安全产业的发展,将把传统安全技术提到一个新的阶段。现在,不管是软件安全厂商还是硬件安全厂商都在积极研发云计算安全产品和方案。包括传统杀毒软件厂商、软硬防火墙厂商、IDS/IPS厂商在内的各个层面的安全供应商都已加入到云安全领域。相信在不久的将来,云安全问题将得到很好的解决.7、云计算平台管理云计算资源规模庞大,服务器数量众多并分布在不同的地点,同时运行着数百种应用,如何有效地管理这些服务器,保证整个系统提供不间断的服务是巨大的挑战。云计算系统的平台管理技术,需要具有高效调配大量服务器资源,使其更好协同工作的能力。其中,方便地部署和开通新业务、快速发现并且恢复系统故障、通过自动化、智能化手段实现大规模系统可靠的运营是云计算平台管理技术的关键。对于提供者而言,云计算可以有三种部署模式,即公共云、私有云和混合云。三种模式对平台管理的要求大不相同。对于用户而言,由于企业对于ICT资源共享的控制、对系统效率的要求以及ICT成本投入预算不尽相同,企业所需要的云计算系统规模及可管理性能也大不相同。因此,云计算平台管理方案要更多地考虑到定制化需求,能够满足不同场景的应用需求。包括Google、IBM、微软、Oracle/Sun等在内的许多厂商都有云计算平台管理方案推出。这些方案能够帮助企业实现基础架构整合、实现企业硬件资源和软件资源的统一管理、统一分配、统一部署、统一监控和统一备份,打破应用对资源的独占,让企业云计算平台价值得以充分发挥。8、绿色节能技术节能环保是全球整个时代的大主题。云计算也以低成本、高效率着称。云计算具有巨大的规模经济效益,在提高资源利用效率的同时,节省了大量能源。绿色节能技术已经成为云计算必不可少的技术,未来越来越多的节能技术还会被引入云计算中来。Carbon Disclosure Project(碳排放披露项目,简称CDP)近日发布了一项有关云计算有助于减少碳排放的研究报告。报告指出,迁移至云的美国公司每年就可以减少碳排放8570万吨,这相当于2亿桶石油所排放出的碳总量。总之,云计算服务提供商们需要持续改善技术,让云计算更绿色原文链接:https://blog.csdn.net/simon2014/article/details/80667754?ops_request_misc=&request_id=&biz_id=102&utm_term=云计算技术&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-2-80667754.nonecase&spm=1018.2226.3001.4187
-
分布式和并行计算,在计算机领域是非常重要的概念。对于一些行外人来说,总觉得这是一些很简单的工作,但是如果我们纵观计算机的硬件发展史,从CPU到GPU,再到TPU和华为的昇腾(NPU),乃至当下的热点量子计算机(QPU),其实就是一个分布式与并行计算的发展史。从简单的数据并行,到算法并行,到图的并行,最后是量子叠加所带来的物理并行。因此能否做好分布式与并行的技术,很大程度上决定了一个工具的性能上限,本文我们一起来研究一下MindSpore分布式训练的方法。环境部署在前面的博客中,我们探讨过用Docker和Singularity容器等方案来安装MindSpore的CPU版本和GPU版本,感兴趣的读者可以翻一翻这些历史博客。而这篇文章中,我们将默认已经在本地安装好一个MindSpore的GPU环境,以此为前提进行探讨在单机多GPU卡的环境下去使用MindSpore的分布式功能。比较完整的介绍可以参考这个官方地址,里面包含了完整的安装部署和使用的介绍。这里我们仅针对本地Ubuntu的环境介绍基本安装和使用方法。安装openmpi这里一共需要安装2个软件,我们都是采取了源码安装的方法,首先到这个MindSpore给出的下载链接中下载对应版本的源码:按照版本配套我们下载这个4.0.3的 tar.gz的压缩包:下载完成后可以大致的按照这里面的操作指导进行源码安装:安装成功的话运行 mpirun --version可以看到版本号。有这里面有两个需要提醒的点是:1. 解压缩不一定用这里面给出的指令,可以用自己的;2. 如果按照这个指引的prefix,后面需要在 LD_LIBRARY_PATH这个环境变量中加入 /usr/local/lib/这个路径,否则会有一些so库无法被识别。安装NCCLMindSpore在GPU上的分布式通信是采用了NCCL这个工具,同样的我们先去这里面给出的链接找源码包下载安装:这里推荐使用Local的安装方案:找到适配自己的系统版本的软件包之后,就可以按照下述的指引一步一步安装:其中如果在 apt-key这一步执行一次失败的话,可以多执行两次看看。环境测试安装成功后,openmpi和NCCL都安装成功后,可以用如下的初始化示例测试一下环境的部署情况:# test-init.py from mindspore import contextfrom mindspore.communication.management import init if __name__ == "__main__": context.set_context(mode=context.GRAPH_MODE, device_target="GPU") init("nccl")如果执行的结果如下所示,没有任何的报错信息,则说明环境部署成功:dechin@ubuntu2004:~/projects/mindspore/test$ mindspore test-init.py dechin@ubuntu2004:~/projects/mindspore/test$MindSpore分布式训练首先可能会有人好奇,上一个章节中最后用的mindspore是个啥指令?这其实是我自己在本地配置的一个mindspore-gpu版本的快捷命令:dechin@ubuntu2004:~/projects/$ cat ~/.bashrc | grep mindsporealias mindspore='singularity exec --nv /home/dechin/tools/singularity/mindspore-gpu_1.2.0.sif python'如果觉得还算方便的话,读者也可以按照自己的喜好去alias一个快捷命令。接下来我们要看一个实现的案例,这个代码来自于前面的这一篇博客,只是我们在这个代码基础之上,加入了上一个章节中的初始化代码init(),完整代码如下所示:# test_nonlinear.py from mindspore import contextfrom mindspore.communication.management import initcontext.set_context(mode=context.GRAPH_MODE, device_target="GPU")init()import numpy as npfrom mindspore import dataset as dsfrom mindspore import nn, Tensor, Modelimport timefrom mindspore.train.callback import Callback, LossMonitor def get_data(num, a=2.0, b=3.0, c=5.0): for _ in range(num): x = np.random.uniform(-1.0, 1.0) y = np.random.uniform(-1.0, 1.0) noise = np.random.normal(0, 0.03) z = a * x ** 2 + b * y ** 3 + c + noise yield np.array([[x**2], [y**3]],dtype=np.float32).reshape(1,2), np.array([z]).astype(np.float32) def create_dataset(num_data, batch_size=16, repeat_size=1): input_data = ds.GeneratorDataset(list(get_data(num_data)), column_names=['xy','z']) input_data = input_data.batch(batch_size) input_data = input_data.repeat(repeat_size) return input_data data_number = 160batch_number = 16repeat_number = 200 ds_train = create_dataset(data_number, batch_size=batch_number, repeat_size=repeat_number)dict_datasets = next(ds_train.create_dict_iterator()) class LinearNet(nn.Cell): def __init__(self): super(LinearNet, self).__init__() self.fc = nn.Dense(2, 1, 0.02, 0.02) def construct(self, x): x = self.fc(x) return x net = LinearNet()model_params = net.trainable_params()print ('Param Shape is: {}'.format(len(model_params)))for net_param in net.trainable_params(): print(net_param, net_param.asnumpy())net_loss = nn.loss.MSELoss() optim = nn.Momentum(net.trainable_params(), learning_rate=0.01, momentum=0.6)model = Model(net, net_loss, optim) epoch = 1model.train(epoch, ds_train, callbacks=[LossMonitor(10)], dataset_sink_mode=False) for net_param in net.trainable_params(): print(net_param, net_param.asnumpy())此时我们需要改成用mpirun去运行这个代码:dechin@ubuntu2004:~/projects/gitlab/dechin/src/mindspore$ mpirun -n 2 singularity exec --nv /home/dechin/tools/singularity/mindspore-gpu_1.2.0.sif python test_nonlinear.py运行过程中我们就可以看到,有两个python的任务分别跑在两个不同的GPU卡上:这个监控方式其实还是 nvidia-smi的指令,只不过为了长期监视GPU状态,我是使用了 watch -n 1 nvidia-smi的指令,每隔1s的时间就刷新一次 nvidia-smi的状态。但是这里需要注意的也有两点:1. 这个代码直接用mindspore指令也可以跑在单GPU卡上,但是如果要用mpirun来运行,那么我们就不能使用刚才alias的mindspore指令,而需要手动写上完整的指令,除非把新的指令再alias一个;2. 上述的代码因为只是初始化了一下,所以虽然跑在两张卡上,但是实际上训练过程并没有互相通信,是两个独立的任务。那么如果要构造一个完整的自动化的分布式训练,就需要像如下代码一样,再加入context.set_auto_parallel_context(parallel_mode=ParallelMode.DATA_PARALLEL)这样的一个字样,以及checkpoint中的一些配置,新的完整代码如下所示:# test_nonlinear.py from mindspore import contextfrom mindspore.communication.management import initcontext.set_context(mode=context.GRAPH_MODE, device_target="GPU")init() import numpy as npfrom mindspore import dataset as dsfrom mindspore import nn, Tensor, Modelimport timefrom mindspore.train.callback import Callback, LossMonitor, ModelCheckpoint, CheckpointConfigfrom mindspore.context import ParallelModeimport mindspore as msms.common.set_seed(0) start_time = time.time()def get_data(num, a=2.0, b=3.0, c=5.0): for _ in range(num): x = np.random.uniform(-1.0, 1.0) y = np.random.uniform(-1.0, 1.0) noise = np.random.normal(0, 0.03) z = a * x ** 2 + b * y ** 3 + c + noise yield np.array([[x**2], [y**3]],dtype=np.float32).reshape(1,2), np.array([z]).astype(np.float32) def create_dataset(num_data, batch_size=16, repeat_size=1): input_data = ds.GeneratorDataset(list(get_data(num_data)), column_names=['xy','z']) input_data = input_data.batch(batch_size) input_data = input_data.repeat(repeat_size) return input_data data_number = 160batch_number = 16repeat_number = 20 context.set_auto_parallel_context(parallel_mode=ParallelMode.DATA_PARALLEL)ds_train = create_dataset(data_number, batch_size=batch_number, repeat_size=repeat_number)dict_datasets = next(ds_train.create_dict_iterator()) class LinearNet(nn.Cell): def __init__(self): super(LinearNet, self).__init__() self.fc = nn.Dense(2, 1, 0.02, 0.02) def construct(self, x): x = self.fc(x) return x net = LinearNet()model_params = net.trainable_params()print ('Param Shape is: {}'.format(len(model_params)))for net_param in net.trainable_params(): print(net_param, net_param.asnumpy())net_loss = nn.loss.MSELoss() optim = nn.Momentum(net.trainable_params(), learning_rate=0.01, momentum=0.6)ckpt_config = CheckpointConfig()ckpt_callback = ModelCheckpoint(prefix='data_parallel', config=ckpt_config) model = Model(net, net_loss, optim) epoch = 10model.train(epoch, ds_train, callbacks=[ckpt_callback], dataset_sink_mode=True) for net_param in net.trainable_params(): print(net_param, net_param.asnumpy()) print ('The total time cost is: {}s'.format(time.time() - start_time))这个代码的运行结果如下所示:dechin@ubuntu2004:~/projects/gitlab/dechin/src/mindspore$ mpirun -n 2 singularity exec --nv /home/dechin/tools/singularity/mindspore-gpu_1.2.0.sif python test_nonlinear.py Param Shape is: 2Parameter (name=fc.weight, shape=(1, 2), dtype=Float32, requires_grad=True) [[0.02 0.02]]Parameter (name=fc.bias, shape=(1,), dtype=Float32, requires_grad=True) [0.02]Param Shape is: 2Parameter (name=fc.weight, shape=(1, 2), dtype=Float32, requires_grad=True) [[0.02 0.02]]Parameter (name=fc.bias, shape=(1,), dtype=Float32, requires_grad=True) [0.02][WARNING] ME(2528801:139843698521024,MainProcess):2021-06-10-09:45:37.603.010 [mindspore/train/callback/_checkpoint.py:428] OSError, failed to remove the older ckpt file /home/dechin/projects/gitlab/dechin/src/mindspore/data_parallel-1_200.ckpt.[WARNING] ME(2528799:139709496722368,MainProcess):2021-06-10-09:45:37.713.232 [mindspore/train/callback/_checkpoint.py:428] OSError, failed to remove the older ckpt file /home/dechin/projects/gitlab/dechin/src/mindspore/data_parallel-2_200.ckpt.[WARNING] ME(2528799:139709496722368,MainProcess):2021-06-10-09:45:37.824.271 [mindspore/train/callback/_checkpoint.py:428] OSError, failed to remove the older ckpt file /home/dechin/projects/gitlab/dechin/src/mindspore/data_parallel-3_200.ckpt.[WARNING] ME(2528799:139709496722368,MainProcess):2021-06-10-09:45:37.943.749 [mindspore/train/callback/_checkpoint.py:428] OSError, failed to remove the older ckpt file /home/dechin/projects/gitlab/dechin/src/mindspore/data_parallel-4_200.ckpt.[WARNING] ME(2528801:139843698521024,MainProcess):2021-06-10-09:45:38.433.85 [mindspore/train/callback/_checkpoint.py:428] OSError, failed to remove the older ckpt file /home/dechin/projects/gitlab/dechin/src/mindspore/data_parallel-5_200.ckpt.Parameter (name=fc.weight, shape=(1, 2), dtype=Float32, requires_grad=True) [[0.12186428 0.21167319]]Parameter (name=fc.bias, shape=(1,), dtype=Float32, requires_grad=True) [5.561276]The total time cost is: 8.412446737289429sParameter (name=fc.weight, shape=(1, 2), dtype=Float32, requires_grad=True) [[0.12186428 0.21167319]]Parameter (name=fc.bias, shape=(1,), dtype=Float32, requires_grad=True) [5.561276]The total time cost is: 8.439369916915894s虽然运行成功了,但是有一点需要注意的是,分布式的这个案例耗时为8.44s,而单卡的训练耗时为8.15s,分布式的训练速度甚至比单卡的要慢,我们在总结里面对这个现象进行一个解释。总结概要这篇文章我们主要探讨如何去部署一个基于MindSpore框架的分布式训练环境,在MindSpore环境已经配置好的情况下,我们只需要安装好openmpi和nccl这两个工具就可以实现分布式的训练,在文中我们已经给出了相应的示例。虽然分布式与并行技术的目的是为了提升性能,但不是说对所有的场景都能够起到加速的作用,比如文章中的案例就没有加速的效果。这其实是因为我们的用例场景太简单了,纵观整个训练过程,GPU的使用率不到10%,在这种情况下还要考虑上通信的开销,自然是没有放在同一个卡上去训练来得快。这也给我们一个启发,考虑使用分布式和并行计算的技术时,一定也要先评估好问题本身是否适用于并行化的处理,否则是达不到预期的加速的目的的。————————————————原文链接:https://blog.csdn.net/baidu_37157624/article/details/117801111
-
Pinpoint是一个APM(应用程序性能管理)工具,适用于用Java/PHP编写的大型分布式系统。大部分微服务的部署使用了Java开发环境,全流程的监控使用Pinpoint。Pinpoint的特性:1.ServerMap :通过可视化其组件的互连方式,了解任何分布式系统的拓扑。单击节点可显示有关组件的详细信息,例如其当前状态和事务计数。2.实时活动线程图 :实时监控应用程序内的活动线程。3.请求/响应散点图 :随时间可视化请求计数和响应模式以识别潜在问题。通过拖动图表可以选择交易以获得更多细节。4.CallStack :获得分布式环境中每个事务的代码级可见性,在单个视图中识别瓶颈和故障点。5.Inspector :查看有关应用程序的其他详细信息,例如CPU使用率,内存/垃圾收集,TPS和JVM参数。Pinpoint主要由四部分组成:1.Agent:用于收集应用端监控数据,无侵入式,向收集器发送跟踪数据2.Collector:收集器,处理agent端发送过来的数据,并持久化3.Web:展示系统调用关系、调用详情、应用状态等,并支持报警等功能4.HBase:持久化层Docker部署:git clone https://github.com/naver/pinpoint-docker.gitcd pinpoint-dockerdocker-compose pull && docker-compose up -d
-
1. ClickHouse典型架构介绍ClickHouse是面向联机分析处理的列式数据库,支持SQL查询,且查询性能好,特别是基于大宽表的聚合分析查询性能非常优异,比其他分析型数据库速度快一个数量级。如上图所示是一个典型的ClickHouse架构,Clickhouse有两个Server实例,根据安装配置所属于一个Shard(分片)下,服务根据实际情况或者向CK server1写入数据,或者向CK server2写入数据,两个CK server会做数据同步,数据互为副本。以此达到高可用。下面介绍实操步骤2. 创建具有ClickHouse管理员权限的用户登陆FusionInsight MRS Mnager, 在系统 > 权限 > 角色 > 添加角色”,填写角色名称,如“ckrole”,在“资源配置权限”选择“集群 > ClickHouse”,勾选“ClickHouse管理员权限”,单击“确定”将新创建的角色赋给指定用户3. 准备测试数据文件 clickhouse_add_new_1kw.csv1,91,覃哲瀚,12,直播,8,7,814.4189503744342,15006893688,西农业大学,立辉.汪@gmail.com,清远,龚巷6号,2019-10-23,22:52:482,49,谢涛,8,百度,7,9,259.93024474384146,17506744519,东南体育大学,子轩.杜@gmail.com,诸暨,周中心91号,2020-02-02,13:57:333,54,潘弘文,14,地图,17,4,932.335702063629,17066786831,西理工大学,鹭洋.田@gmail.com,长沙,江路525号,2019-01-21,20:22:444,7,戴鹤轩,1,板,11,8,508.0466227296797,17216768659,西南艺术大学,思淼.龙@gmail.com,溧阳,傅巷715号,2018-03-23,08:42:465,100,雷鑫磊,25,手游,12,1,498.4711811385675,18369854964,西北大学,鑫鹏.段@gmail.com,莱州,龚栋63468号,2021-02-25,12:04:386,68,田雪松,23,思维,19,3,859.353172732648,15895802281,东南理工大学,锦程.宋@gmail.com,烟台,曾侬10113号,2020-07-22,05:52:237,62,覃越彬,19,加减法,11,4,657.0662362666259,18401893733,西北经贸大学,思源.江@hotmail.com,舟山,熊栋971号,2019-06-09,01:25:328,72,赖泽洋,5,联盟,16,3,95.48824929241516,15073790055,西农业大学,绍辉.黎@yahoo.com,溧阳,贺旁00号,2020-05-02,13:46:429,35,段熠彤,12,直播,18,5,246.4268875550932,17625429020,西经贸大学,皓轩.冯@gmail.com,合肥,曹桥9757号,2018-06-15,01:55:2610,97,郭远航,25,手游,3,0,198.01031956868363,17379106396,北艺术大学,明辉.韩@hotmail.com,沈阳,秦路47号,2019-10-05,13:48:154. 使用客户端登陆clickhousesource /opt/hadoopclient/bigdata_envkinit developuserclickhouse client --host 172.16.9.117 --port 214235. 创建测试数据库create database test001 on cluster default_cluster;6. 创建复制表CREATE TABLE test001.test_ReplicateMergeTree_local on cluster default_cluster (aid Int64,uid Int64,uname String,wid Int64,word String,pv Int64,click Int64,cost float,phone String,university String,email String,city String,street String,date Date,time String) ENGINE=ReplicatedReplacingMergeTree('/clickhouse/tables/test001/test_ReplicateMergeTree_local/{shard}', '{replica}') PARTITION BY date ORDER BY aid;7. 创建分布式表create table test001.test_ReplicateMergeTree_all ON CLUSTER default_cluster as test001.test_ReplicateMergeTree_local ENGINE = Distributed(default_cluster, test001, test_ReplicateMergeTree_local, rand());8. 导入测试数据clickhouse client -m --host 172.16.9.117 --port 21423 --database="test001" --query="insert into test001.test_ReplicateMergeTree_local FORMAT CSV" < /opt/clickhouse_add_new_1kw.csv9. 测试select count(*) from test001.test_ReplicateMergeTree_all;10. 删表语句drop table test001.test_ReplicateMergeTree_local on cluster default_cluster no delaydrop table test001.test_ReplicateMergeTree_all on cluster default_cluster no delay视频
-
在2021年06月02日,HarmonyOS 的发布尽管目前还是实验特性,我觉得很弔!官方网站: https://www.harmonyos.com/「注意事项:使用分布式模拟器前,请不要连接安卓设备!!!」升级如果您使用的旧版,请升级到最新版本。当然,如果您还没有安装,那么恭喜您,您一定不会遇到我踩过的坑!我在升级之后,遇到了远程模拟器无法开启的问题,后来经过重新安装SDK解决了!问题的截图如下: 重新安装 SDK得以解决:当前我的版本:体验首先,我们需要开启功能。我们进到编辑器的实验特性设置,开启相应的能力,主要是勾选「Enable Super Device」:再进到模拟器设备管理就能看到了: 目前支持 「手机+手机」 以及 「手机 + 平板」: 其中以Distributed开头的都是分布式能力的应用。比如分布式邮件应用、分布式地图应用、分布式视频应用、分布式游戏,涵盖了多种场景,也方便大家拓展创意。我这里以分布式邮件应用为例。分布式邮件应用极大方便了我们对邮件的编辑,比如鸿蒙A设备上写邮件想要用到鸿蒙B设备的文件作为附件,我们可以将应用从A设备流转到B设备,从而使得邮件应用能够直接使用B设备的文件作为附件。我们先启动分布式模拟器,本次我使用的是「手机+平板」:接着,我们可以直接选择 super app 进行分布式应用的运行:此时值得注意的有几点:此时千万不要连接安卓设备!!!分布式模拟器暂时不太稳定,如果遇到有设备黑屏,请关掉远程模拟器重新再开如果我连接了安卓设备会怎样?duang……duang……duang!会没法选择设备!!!当我把安卓设备一拔掉就立马恢复正常:(别问我为什么,我也一脸问号,期待评论区的解答)啥也不说,先运行: 好家伙,我直接好家伙,成功了!直接就是分布式能力的体验,看好了,我要流转了~: duang……duang……duang……就问你,牛B不牛B?拥抱鸿蒙,拥抱未来!One as all, all as one!
-
一、【环境要求】和 架构信息(软件版本信息)确认CPU架构:x86_64/aarch64OS版本:openEuler20.03-LTS-SP1kernel version:4.19.90 命令确认:cat /etc/os-release uname -i二、安装Redis-6.0.0步骤Redis部署方式主要分为三种,分别为:yum源、rpm包、源码编译安装。本部署文档以源码编译安装Redis-6.0.0。下载Redis-6.0.0源码包#下载redis-6.0.0源码 wget https://download.redis.io/releases/redis-6.0.0.tar.gz解压源码包tar -xzvf redis-6.0.0.tar.gz安装依赖yum -y install gcc gcc-c++ kernel-devel本机系统已经安装过,所以不用安装了。如果确认安装过依赖,可以忽略这个步骤进入redis-6.0.0目录,编译redis,耐心等待,需要一点时间编译cd redis-6.0.0 make安装redis到指定目录make PREFIX=/usr/local/redis install三、测试验证 启动测试/usr/local/redis/bin/redis-server & # 查看redis进程 ps -ef|grep redis查看redis-server及redis-cli版本/usr/local/redis/bin/redis-server -v /usr/local/redis/bin/redis-cli -v登入redis客户端,创建测试key-value至此,在openEuler-20.03-LTS-SP1上面源码编译安装redis-6.0.0完成
-
一、【环境要求】和 架构信息(软件版本信息)确认uname -i cat /etc/os-release先决条件必须安装Java:Hadoop是利用java开发的开源软件,所以需要安装java。java -versionssh:必须安装ssh,并且sshd必须正在运行才能使用管理远程Hadoop守护程序的Hadoop脚本。说明:什么是伪分布式安装?hadoop有三种模式的安装,分别为独立安装、伪分布式安装、全分布式安装。独立安装是最简单安装,即将hadoop安装在一台机器上,伪分布式安装是在独立安装的基础上进行相应的配置而成,所谓伪分布式安装就是在一台机器上模拟一个小规模的集群,相较于独立模式,伪分布式模式下可以使用yarn、HDFS等。目前就只有一台虚拟机器,所以就搭建伪分布模式的hadoop,接下来就介绍怎么以伪分布模式安装hadoop。二、安装伪分布式详细步骤1、在 /root/software 目录下载 hadoop-2.6.0.tar.gz【如果没有此目录,则自己创建】,利用tar -zxvf 解压下载的包。[root@localhost ~]# cd /root [root@localhost ~]# mkdir software [root@localhost ~]# cd software/ [root@localhost software]# wget http://archive.apache.org/dist/hadoop/common/hadoop-2.6.0/hadoop-2.6.0.tar.gz[root@localhost software]# tar -zvxf hadoop-2.6.0.tar.gz 2、启动Hadoop 编辑hadoop-env.sh文件,进入解压好的hadoop文件夹,在etc/hadoop路径下(即全路径:/root/software/hadoop-2.6.0/etc/hadoop)找到hadoop-env.sh文件,打开hadoop-env.sh文件,找到export JAVA_HOME=${JAVA_HOME},修改为java安装的根目录【根据自己系统的java安装目录自行调整】。vi /root/software/hadoop-2.6.0/etc/hadoop/hadoop-env.sh退回到hadoop目录下,即/root/software/hadoop-2.6.0路径下,使用命令bin/hadoop,若出现以下提示,则hadoop安装成功:[root@localhost hadoop-2.6.0]# cd /root/software/hadoop-2.6.0 [root@localhost hadoop-2.6.0]# ./bin/hadoop3、配置core-site.xml和hdfs-site.xml 配置core-site.xml:该配置文件在etc/hadoop路径下,即/root/software/hadoop-2.6.0/etc/hadoop路径下,在<configuration>节点下添加如下内容:<property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property>[root@localhost hadoop-2.6.0]# vi /root/software/hadoop-2.6.0/etc/hadoop/core-site.xml 4、配置hdfs-site.xml:该配置文件在etc/hadoop路径下,即/root/software/hadoop-2.6.0/etc/hadoop路径下,在<configuration>节点下添加如下内容: <property> <name>dfs.replication</name> <value>1</value> </property>这是设置存储到HDFS文件系统中的文件需要复制的份数,在全分布模式下,每上传一个文件到HDFS文件系统中,HDFS都会根据设置的复制份数把文件复制对应的份数并分散存储到不同的节点上,这种机制保证了HDFS文件的容灾性、容错性,一般在全分布模式下设置为3份,由于我们目前是伪分布模式,只有一个节点(一台机器),所以存储一份即可。[root@localhost hadoop-2.6.0]# vi /root/software/hadoop-2.6.0/etc/hadoop/hdfs-site.xml 5、安装ssh 先检查一下Linux系统上是否安装了ssh,使用以下命令查看本地是否已经安装ssh: ssh 如果安装ssh,会出现如下图所示: 检查ssh到本地是否需要密码,使用如下命令:如果不需要输入密码,则ssh配置成功 ssh localhost 如果使用ssh localhost需要输入密码,执行以下命令配置sshssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys chmod 0600 ~/.ssh/authorized_keys 如上命令执行成功之后,再执行ssh localhost命令,如果不需要密码且出现以下提示,则ssh配置成功: 6、配置MapReduce 格式化文件系统并启动NameNode守护进程和DataNode守护进程[root@localhost ~]# cd /root/software/hadoop-2.6.0/ [root@localhost hadoop-2.6.0]# bin/hdfs namenode -format [root@localhost hadoop-2.6.0]# sbin/start-dfs.sh 执行上述命令之后,在浏览器中输入http://IP:50070,IP是你安装hadoop机器的IP,出现如下图界面,代表MapReduce配置成功:7、在单节点上配置yarn:以下的步骤在上述所有操作都执行成功的前提下进行。 配置mapred-site.xml:mapred-site.xml文件同样存放在/root/software/hadoop-2.6.0/etc/hadoop路径下,默认该路径下并不存在mapred-site.xml文件,而是存在mapred-site.xml.template文件,复制一份mapred-site.xml.template文件,并改名为mapred-site.xml即可,在<configuration>节点下添加如下内容:<property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>[root@localhost hadoop-2.6.0]# cd /root/software/hadoop-2.6.0/etc/hadoop [root@localhost hadoop]# cp mapred-site.xml.template mapred-site.xml [root@localhost hadoop]# vi mapred-site.xml 配置yarn-site.xml:yarn-site.xml文件同样存放在/root/software/hadoop-2.6.0/etc/hadoop路径下,在<configuration>节点下添加如下内容: <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> vi yarn-site.xml 使用如下命令启动ResourceManager守护程序和NodeManager守护程序[root@localhost ~]# cd /root/software/hadoop-2.6.0 [root@localhost hadoop-2.6.0]# sbin/start-yarn.sh 在浏览器地址栏输入地址:http://IP:8088,如果出现如下界面,代表配置单节点yarn成功:至此,伪分布式hadoop安装成功
-
云计算的下一个阶段将是把全球所有的公共和私有数据中心合并为一台易于访问和使用的“无限强大的计算机”。IBM为此准备了一个路径图。 来源 |ZDNet “我们正在努力实现我们的愿景——即让全世界的云计算资源像一台计算机一样易于使用。当我们这样做的时候,我们将最终实现云计算的全部革命性潜力。只需要单击一个按钮,我们就可以在需要的时候获得我们想要的一切,这一切只需要一个毫秒。” 这段话来自IBM研究院混合云平台主管Priya Nagpurkar。她在最近对 IBM 研究院高级副总裁兼总监 Dario Gil 的采访中说出这番话。 Nagpurkar 解释了IBM研究院是如何开创无服务器计算架构的,该架构可以将云计算的资源变成世界上最大的计算机。无服务器计算将使这一切成为可能,完全摆脱了复杂的后端配置和安全性管理。 世界顶级的公共云数据中心已经遍布各大洲,在数百个地点落脚。Gil表示:“然而,这只是描绘了这幅画卷的一部分而已。”全球还有“大量的私有云环境像孤岛般存在着。经过多年的高速发展,云计算成长成了今天这个样子,变成了一个由公共和私有数据中心组成的大规模分布式网络,包括了ZB级别的计算能力和数据存储能力。” Nagpurkar认为,对于云端目前的各种进步,我们必须“让云像一台无限强大的计算机一样工作。”她补充表示,目前,还存在着非常多的障碍。“想想使用笔记本电脑工作是多么简单,你有一个非常熟悉的通用操作系统工具。而且,最重要的是,你将大部分时间花在代码上。可是在云端进行开发可就完全不是这么一回事了。在云端开发,你必须了解各个云供应商之间的细微差别——AWS、Azure、GCP、IBM,还有各种私有云。你不得不配置云资源,它们可能要一段时间才能上线。你还必须操心安全性、合规性、弹性、可扩展性和成本效率。这实在是太复杂了。” 她说到,来自不同供应商的专有软件产品“不仅大大增加了各种复杂性,还扼杀了创新。”她认为,“关键的软件抽象始于操作系统。Linux 作为数据中心时代的操作系统推动了软件的激增,包括容器等虚拟化技术。这开创了云计算时代。” 无服务器技术正在为访问和使用这台正在出现的全球计算机铺平道路。“无服务器技术是实现这一目标的关键。无服务器具有三个关键属性:易用性、按需供应的弹性和按使用付费。”她举了一个例子,“例如你要在云端完成一个简单的数据准备工作,这是一个非常常见的任务。但是在这种情况下,数据可能来自任何地方——例如边缘环境。为了让这项工作像执行一个命令一样简单,你的笔记本可能会在幕后完成很多工作,而今天,这些工作需要开发人员和数据科学家在云端手动完成。我不得不担心:我可以访问吗?我可以移动数据吗?API 密钥在哪里?我应该设置多少个容器?我花费了大量的时间在这些事情上。但是有了无服务器技术,你可以将这些问题归结为一个命令,就像在笔记本电脑上移动文件一样简单——无服务器平台会在幕后完成其他的一切工作。这就是无服务器模式的美妙之处。” IBM研究院正在“Knative 开源社区推动这一愿景向前发展”。IBM 通过 Red Hat OpenShift Serverless 支持这一功能。Nagpurkar表示:“我们继续推动无服务器的这种发展,它让我们越来越接近将云计算合并为一台计算机的愿景。” 实现全球单一计算机的愿景?Nagpurkar表示:“驾驭这个极度异构并分散的系统,现在是我们在计算机科学领域应该解决的最大挑战之一。”她表示,现在是分布式操作系统提供“跨越这些异构和分布式云资源的通用抽象层”的时候了。Kubernetes 是一种开放技术,这场进化之战中正在成为赢家。“所以你有了Linux 容器和 Kubernetes,两者都是开放技术。”
-
200.分布式计算的定义和特征是什么?定义:分布式计算就是在两个或多个软件互相共享信息,这些软件既可以在同一台计算机上运行,也可以在通过网络连接起来的多台计算机上运行。特征:分布式计算中,多个通过网络互联的计算机都具有一定的计算能力,它们之间互相传递数据,实现信息共享,协作共同完成一个处理任务。201.在 FusionCompute 中,虚拟机热迁移能够带给客户什么价值?降低服务器操作维护过程中业务中断的风险;降低服务器升级过程中业务中断的风险;将虚拟机集中到几台服务器上,关闭没有负载的服务器,降低业务运行成本;防止服务器故障导致的虚拟机业务中断。
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第五期2026/09/04 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;蒋春阳-华为云AI开发者案例开发专家
本期直播内容: AI工具体验营 · 第5-8课连讲。Agent-Team 多智能体协作完成毕业设计实践
回顾中 -
华为云开发者AI素养ClassRoom·第六期2026/09/08 周二 19:00-20:00
樊渊-2026华为软件挑战赛冠军
高手来了:看软挑高手解析二维排样问题—从工业难题到算法突破
回顾中
热门标签