|
主動駕驶是近来几年的热點范畴,專注于主動駕驶技能的創素顏霜,業公司、新造車企業、傳统車厂都在這個范畴投入了大量的資本,鞭策着 L四、L5 级别主動駕驶體驗能及早進入咱們的平常糊口。
主動駕驶技能實现的焦點环節是主動駕驶模子的練習,練習数据是由汽車现實收集回来的真實門路駕驶视频,数据范围稀有 PB 到数十 PB 之多。在模子練習以前,先要對這些原始视频举行處置,截取此中的关頭帧保留為照片。然後再由專業数据標注团队在图片上標識表记標帜关頭信息,好比红绿灯、門路標識表记標帜等。终极颠末標識表记標帜的数十亿图片和標識表记標帜数据成為真正要「喂给」練習框架的内容。
認識散布式體系和散布式存储的朋侪必定晓得,LOSF(Lots of Small Files,海量小文件)是存储范畴的浩劫题。而在人工智能 CV(Computer Vision)范畴中基于 LOSF 的練習又是刚需,包含主動駕驶、人脸辨認、物體檢测等细分范畴。
本篇文章来自 JuiceFS 某主動駕驶行業客户的架構實践,在百亿范围小文件練習場景下举行了一系列樂成的摸索,但愿能為相干行業的利用带来一些参考和開导。
主動駕驶體系的練習数据集大多稀有十亿到数百亿小文件(小于 1MiB 的文治療糖尿病,件),一次練習凡是必要数万万到数亿文件。并且練習 worker 每次天生 mini-batch 都必要频仍拜候存储體系,此中大部門是對元数据的哀求,是以,元数据機能直接影响模子練習的效力。
這就请求存储體系不但要具有辦理百亿文件的能力,還必需在高并發哀求下,连結低時延、高吞吐的元数据機能。
在存储體系選型中,工具存储是可以或许承载百亿范围文件的,可是缺乏原生目次支撑、缺乏完备 POSIX 语义支撑、元数据機能弱這三方面的問题讓工具存储其實不合适海量小文件練習場景。
在一些常见的散布式文件體系架構設計中,HDFS 其實不合适存储小文件,固然可以采纳 Scale-Up NameNode 和联邦(federation)的方法容纳必定范围的数据,但要存储百亿级小文件仍然是一件很是坚苦的事變;CephFS 的 MDS 固然有 Scale-Out 能力,但单過程的并發處置能力不高,跟着 MDS 集群范围的增上進程間和谐開消增大,使得总體機能达不到线性增加。
固然在 TensorFlow 中支撑将多個小文件归并成大文件的 TFRecord 格局来低落練習進程中對存储體系的元数据负载压力,可是在主動駕驶范畴,這類方案低落了数据集随機取样的精度,并且其它練習框架(如 PyTorch)也不兼容,造成不少未便。
JuiceFS 是面向云原生情况設計的開源散布式文件體系,JuiceFS 的立异在于:
可以用肆意工具存储作為数据长期层,保留数据内容。不管任何公有云、私有云情况,只要有工具存储辦事,都能用 JuiceFS;
100% 兼容 POSIX、HDFS、S3 三大主流拜候协定,能對接所有利用;
元数据引擎是可插拔架構,支撑包含 Redis、TiKV、MySQL 等多種数据库作為存储引擎,同時,也供给兼具高機能和海量存储的商用元数据引擎。
JuiceFS 的商用元数据引擎采纳 Raft 算法组成份布式集群,包管数据的靠得住性、一致性和高可用性。元数据全数存储在節點的内存中,包管低時延相應。元数据引擎采纳動态目次树方案举行横向扩大,每一個分片(shard)是一個自力的 Raft 组,文件體系目次树可以肆意劃分,分派到必要的分片中,主動平衡與手動平衡相连系。分片機制對付客户端拜候透明。
既然練習使命必要频仍拜候存储體系,每次颠末收集的開消叠加起来也是不小的冗余,今朝工業界都在摸索存储與计较分手後的缓存加快方案。JuiceFS 已内置了缓存能力,客户端拜候過的数据,可以主動缓存在该節點指定的存储介質上,下次拜候就可以直接射中缓存,不消再經由過程收集读取。一样,元数据也會主動缓存到客户端内存中。
缓存機制在利用上是透明的,無需扭轉现有利用,只要在 JuiceFS 客户端挂载時添加几個参数,阐明缓存的路径、容量等信息便可。缓存對付練習加快的結果很是较着,可以参考咱們此外一篇文章「若何借助 JuiceFS 為 AI 模子練習提速 7 倍」。缓存不但能加快練習,還能显著削减工具存储 API 的挪用,從而低落用度開消。
對付散布式練習平台来讲,不异的練習数据可能會被分歧的使命同享,這些使命不必定會被调剂到统一個節點上,若是是散布在分歧節點那缓存数据還能同享嗎?操纵 JuiceFS 的「缓存数据同享」特征,多個練習節點配合構成一個缓存集群,在這個集群中的練習使命均可以同享缓存数据。也就是说當練習使命所處的節點没有射中缓存時,可以或许經由過程统一集群中的其它節點来获得数据,而不消去哀求远真個工具存储。
練習節點可能不是一個静态的資本,出格是在容器平台里,生命周期的變更是很快的,是不是會影响缓存数据同享的結果呢?這就要引出下一個問题。
每家主動駕驶范畴的公司都有不少算法鑽研員、工程師,他們的算法要同享公司的计较資本完成練習和驗證。從平台角度讲,資本弹性伸缩是一個提高总體操纵率的好法子,按需给每一個練習使命分派資本,防止挥霍。
但在這類弹性伸缩的集群中,前面提到的當地缓存数据會遭到必定影响。固然缓存集群經由過程一致性哈希确保了當集群成員產生變革時,必要迁徙的数据尽戒煙神器, 可能少,可是@對%k5627%付大范%8R4no%围@的練習集群来讲如许的数据迁徙仍是會對总體的練習效力造成影响。
有無一種法子既能知足練習集群資本弹性伸缩的需求,又不显著影响模子練習效力呢?
這就必要 JuiceFS 独占的「自力缓存集群」特征了。
所谓自力缓存集群,就是将卖力存储缓存数据的節點自力摆設,供给常驻的缓存数据辦事。如许不會受練習集群動态變革的影响,讓練習使命有更高、更不乱的缓存射中率。
整系统统的架構以下图所示:
好比有一個動态的練習集群 A 和專門用来做缓存的集群 B,他們都必要利用不异的挂载参数 --cache-group=CACHEGROUP 来構建一個缓存组,此中集群 A 的節點挂载時必要加之 --no-sharing参数。當集群 A 的利用读数据時,若是當前節點的内存缓和存盘上没有该缓存数据,它就會按照一致性哈希從集群 B 當選擇一個節點来读取数据。
此時全部體系由 3 级缓存组成:練習節點的體系缓存、練習節點的磁盘缓存、缓存集群 B 中的缓存,用户可以按照详细利用的拜候特色設置装备摆設各個层级的缓存介質和容量。
為了确保當磁盘毁坏時不會對練習使命發生影响,JuiceFS 還供给了缓存数据容灾能力。若是缓存節點的磁盘不测毁坏,改换新的磁盘後 JuiceFS 可以主動重修必要的缓存数据。
主動駕驶的練習使命必要大量的 GPU 資本,在充實操纵的环境下,本身在機房中采购 GPU,可以比利用公有云廉價很多,這也是今朝不少主動駕驶公司的選擇。可是,在機房中自建存储體系则没這麼简略,會碰到两個挑战:
数据增加快,采购很難跟上扩容速率,一次買太多,又會造成挥霍;
@保%8551Z%護大范%8R4no%围@的存储集群,必需面临磁盘毁坏等問题,運维本钱高,效力低;
比拟自建存储體系,公有云上的工具存储辦事可以弹性伸缩,無穷扩容,单元本钱廉價,数据的靠得住性和辦事的可用性比拟機房自建存储都更高,是存储海量数据的不错選擇。
JuiceFS 很是合适這類 IDC 機房 + 公有云的夹杂云架構。用户将本身的 IDC 機房與公有云專线毗连,数据經由過程 JuiceFS 长期化到公有云工具存储中,在 IDC 機房里設置一個缓存集群,起到缓存数据加快練習的結果,比拟每次從工具存储拜候数据,既能節乳酸菌飲食,流專线带宽,還能節流工具存储 API 挪用用度。
當夹杂云架構连系 JuiceFS 以後,既享受了云存储带来的便當,又經由過程自建 IDC 低落了 GPU 本钱。對付練習平台的利用者、保護者来讲都很是简略便利,知足企業多样化的根本举措措施架構設計需求。
在這個實践案例中,客户有两個 IDC,相距上千千米,練習使命也會被分派到两個 IDC 中,是以数据集也必要在两個 IDC 中被拜候。以前,客户是手工保護将数据集复制到两個 IDC 中。利用 J催情藥水,uiceFS 後,「数据镜像」特征可以省去此前的手工劳動,数据及時同步,知足多地协同事情的需求。
详细来讲,数据镜像功效必要在两個 IDC 中都摆設 JuiceFS 的支票借款,元数据集群,當数据镜像启用後,原始文件體系會主動将元数据复制到镜像區域。镜像文件體系被挂载後,客户端會從原始文件體系的工具存储拉取数据,写入到镜像文件體系的工具存储。镜像文件體系挂载後,数据會優先從當地的工具存储读取,若是因同步未完成而呈现读取失败,则會测驗考试從原始文件體系的工具存储读取。
启用数据镜像後,所稀有据可以主動复制到两個工具存储中,起到异地灾备的感化。若是不必要异地灾备,在镜像區域可以不設置装备摆設工具存储,只举行元数据的复制,数据可以提早預热到镜像區域的自力缓存集群来加快練習。如许可以省去一份工具存储的本钱,本案例中的客户就采纳了此方案。
不论是為了實现辅助駕驶仍是真實的主動駕驶,平常都必要經由過程路采車采集大量的路采数据,這些数据會再颠末一些處置流程二次加工今後终极存储到企業的存储體系中。主動駕驶企業對付這些数据的平安性和靠得住性有着极高的请求,是以数据庇護是一個很是关頭的問题。
咱們起首来看看企業上云今後的平安問题。不少時辰企業對付上云會存在必定的数据平安担心,出格是當触及到一些敏感数据時。JuiceFS 供给的「数据加密」特征同時支撑傳输中加密(encryption in transit)和静态加密(encryption at rest),保障上云進程中各個环節的数据平安性。
其次可能面對的是数据辦理問题。為了避免数据泄露或误操作,企業可能必要针對分歧团队、分歧用户举行权限辦理和節制。JuiceFS 托管辦事經由過程「拜候令牌」可以限制某個 IP 范畴的读写权限和可拜候的子目次。挂载以後,JuiceFS 支撑基于「用户/用户组」 的权限辦理模子,可以機動针對团队或小我举行权限設置。
若是某個用户已具有拜候某些数据的权限,也仍是必要進一步對数据举行庇護,好比用户可能误删除或误更新数据。對付误删除,JuiceFS 托管辦事供给的「收受接管站」功效可以确保数据被删除今後的一段時候内可以或许再次規复。
可是若是数据被误更新了或由于某種缘由毁坏了,即便有收受接管站也杯水車薪,此時 JuiceFS 的「及時数据庇護」特征就很是有效了。這個功效的實现道理是保存必定時候的 Raft 日记,如许當数据误更新產生時可以經由過程回放汗青日记的方法将那時的元数据規复。同時因為 JuiceFS 写入工具存储的文件是分块(block)存储,更新文件不會點窜汗青的 block 而是天生新的 block,是以只要工具存储上的汗青 block 尚未被删除便可以完备規复数据,就像一個可以随時韶光倒流的「時候呆板」同样! |
|