自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

HBase在人工智能場景的使用

大數(shù)據(jù) 人工智能
近幾年來,人工智能逐漸火熱起來,特別是和大數(shù)據(jù)一起結合使用。人工智能的主要場景又包括圖像能力、語音能力、自然語言處理能力和用戶畫像能力等等。這些場景我們都需要處理海量的數(shù)據(jù),處理完的數(shù)據(jù)一般都需要存儲起來,這些數(shù)據(jù)的特點主要有如下幾點。

近幾年來,人工智能逐漸火熱起來,特別是和大數(shù)據(jù)一起結合使用。人工智能的主要場景又包括圖像能力、語音能力、自然語言處理能力和用戶畫像能力等等。這些場景我們都需要處理海量的數(shù)據(jù),處理完的數(shù)據(jù)一般都需要存儲起來,這些數(shù)據(jù)的特點主要有如下幾點:

大:數(shù)據(jù)量越大,對我們后面建模越會有好處;

稀疏:每行數(shù)據(jù)可能擁有不同的屬性,比如用戶畫像數(shù)據(jù),每個人擁有屬性相差很大,可能用戶A擁有這個屬性,但是用戶B沒有這個屬性;那么我們希望存儲的系統(tǒng)能夠處理這種情況,沒有的屬性在底層不占用空間,這樣可以節(jié)約大量的空間使用;

列動態(tài)變化:每行數(shù)據(jù)擁有的列數(shù)是不一樣的。

為了更好的介紹 HBase 在人工智能場景下的使用,下面以某人工智能行業(yè)的客戶案例進行分析如何利用 HBase 設計出一個快速查找人臉特征的系統(tǒng)。

[[250188]]

目前該公司的業(yè)務場景里面有很多人臉相關的特征數(shù)據(jù),總共3400多萬張,每張人臉數(shù)據(jù)大概 3.2k。這些人臉數(shù)據(jù)又被分成很多組,每個人臉特征屬于某個組。目前總共有近62W個人臉組,每個組的人臉張數(shù)范圍為 1 ~ 1W不等,每個組里面會包含同一個人不同形式的人臉數(shù)據(jù)。組和人臉的分布如下:

  • 43%左右的組含有1張人臉數(shù)據(jù);
  • 47%左右的組含有 2 ~ 9張人臉數(shù)據(jù);
  • 其余的組人臉數(shù)范圍為 10 ~ 10000。

現(xiàn)在的業(yè)務需求主要有以下兩類:

  • 根據(jù)人臉組 id 查找該組下面的所有人臉;
  • 根據(jù)人臉組 id +人臉 id 查找某個人臉的具體數(shù)據(jù)。

MySQL + OSS 方案

之前業(yè)務數(shù)據(jù)量比較小的情況使用的存儲主要為 MySQL 以及 OSS(對象存儲)。相關表主要有人臉組表group和人臉表face。表的格式如下:

group表: 

[[250189]]

face表: 

HBase在人工智能場景的使用

其中 feature 大小為3.2k,是二進制數(shù)據(jù) base64 后存入的,這個就是真實的人臉特征數(shù)據(jù)。

現(xiàn)在人臉組 id 和人臉 id 對應關系存儲在 MySQL 中,對應上面的 group 表;人臉 id 和人臉相關的特征數(shù)據(jù)存儲在 OSS 里面,對應上面的 face 表。

因為每個人臉組包含的人類特征數(shù)相差很大(1 ~ 1W),所以基于上面的表設計,我們需要將人臉組以及每張人臉特征id存儲在每一行,那么屬于同一個人臉組的數(shù)據(jù)在MySQL 里面上實際上存儲了很多行。比如某個人臉組id對應的人臉特征數(shù)為1W,那么需要在 MySQL 里面存儲 1W 行。

我們?nèi)绻枰鶕?jù)人臉組 id 查找該組下面的所有人臉,那么需要從 MySQL 中讀取很多行的數(shù)據(jù),從中獲取到人臉組和人臉對應的關系,然后到 OSS 里面根據(jù)人臉id獲取所有人臉相關的特征數(shù)據(jù),如下圖的左部分所示。

HBase在人工智能場景的使用

我們從上圖的查詢路徑可以看出,這樣的查詢導致鏈路非常長。從上面的設計可看出,如果查詢的組包含的人臉張數(shù)比較多的情況下,那么我們需要從 MySQL 里面掃描很多行,然后再從 OSS 里面拿到這些人臉的特征數(shù)據(jù),整個查詢時間在10s左右,遠遠不能滿足現(xiàn)有業(yè)務快速發(fā)展的需求。

HBase 方案

上面的設計方案有兩個問題:

  • 原本屬于同一條數(shù)據(jù)的內(nèi)容由于數(shù)據(jù)本身大小的原因無法存儲到一行里面,導致后續(xù)查下需要訪問兩個存儲系統(tǒng);
  • 由于MySQL不支持動態(tài)列的特性,所以屬于同一個人臉組的數(shù)據(jù)被拆成多行存儲。

針對上面兩個問題,我們進行了分析,得出這個是 HBase 的典型場景,原因如下:

  • HBase 擁有動態(tài)列的特性,支持萬億行,百萬列;
  • HBase 支持多版本,所有的修改都會記錄在 HBase 中;
  • HBase 2.0 引入了 MOB(Medium-Sized Object) 特性,支持小文件存儲。HBase 的 MOB 特性針對文件大小在 1k~10MB 范圍的,比如圖片,短視頻,文檔等,具有低延遲,讀寫強一致,檢索能力強,水平易擴展等關鍵能力。

我們可以使用這三個功能重新設計上面 MySQL + OSS 方案。結合上面應用場景的兩大查詢需求,我們可以將人臉組 id 作為 HBase 的 Rowkey,系統(tǒng)的設計如上圖的右部分顯示,在創(chuàng)建表的時候打開 MOB 功能,如下:

  1. create 'face', {NAME => 'c', IS_MOB => true, MOB_THRESHOLD => 2048} 

上面我們創(chuàng)建了名為 face 的表,IS_MOB 屬性說明列簇 c 將啟用 MOB 特性,MOB_THRESHOLD 是 MOB 文件大小的閾值,單位是字節(jié),這里的設置說明文件大于 2k 的列都當做小文件存儲。大家可能注意到上面原始方案中采用了 OSS 對象存儲,那我們?yōu)槭裁床恢苯邮褂? OSS 存儲人臉特征數(shù)據(jù)呢,如果有這個疑問,可以看看下面表的性能測試: 

HBase在人工智能場景的使用

根據(jù)上面的對比,使用 HBase MOB特性來存儲小于10MB的對象相比直接使用對象存儲有一些優(yōu)勢。

我們現(xiàn)在來看看具體的表設計,如下圖:

HBase在人工智能場景的使用

上面 HBase 表的列簇名為c,我們使用人臉id作為列名。我們只使用了 HBase 的一張表就替換了之前方面的三張表!雖然我們啟用了 MOB,但是具體插入的方法和正常使用一樣,代碼片段如下: 

  1. String CF_DEFAULT = "c"
  2. Put put = new Put(groupId.getBytes()); 
  3. put.addColumn(CF_DEFAULT.getBytes(),faceId1.getBytes(), feature1.getBytes()); 
  4. put.addColumn(CF_DEFAULT.getBytes(),faceId2.getBytes(), feature2.getBytes()); 
  5. …… 
  6. put.addColumn(CF_DEFAULT.getBytes(),faceIdn.getBytes(), featuren.getBytes()); 
  7. table.put(put); 

用戶如果需要根據(jù)人臉組id獲取所有人臉的數(shù)據(jù),可以使用下面方法: 

  1. Get get = new Get(groupId.getBytes()); 
  2. Result re=table.get(get); 

這樣我們可以拿到某個人臉組id對應的所有人臉數(shù)據(jù)。如果需要根據(jù)人臉組id+人臉id查找某個人臉的具體數(shù)據(jù),看可以使用下面方法: 

  1. Get get = new Get(groupId.getBytes()); 
  2. get.addColumn(CF_DEFAULT.getBytes(), faceId1.getBytes()) 
  3. Result re=table.get(get); 

經(jīng)過上面的改造,在2臺 HBase worker 節(jié)點內(nèi)存為32GB,核數(shù)為8,每個節(jié)點掛載四塊大小為 250GB 的 SSD 磁盤,并寫入 100W 行,每行有1W列,讀取一行的時間在100ms-500ms左右。在每行有1000個face的情況下,讀取一行的時間基本在20-50ms左右,相比之前的10s提升200~500倍。

下面是各個方案的對比性能對比情況。

HBase在人工智能場景的使用

使用 Spark 加速數(shù)據(jù)分析

我們已經(jīng)將人臉特征數(shù)據(jù)存儲在阿里云 HBase 之中,這個只是數(shù)據(jù)應用的***步,如何將隱藏在這些數(shù)據(jù)背后的價值發(fā)揮出來?這就得借助于數(shù)據(jù)分析,在這個場景就需要采用機器學習的方法進行聚類之類的操作。我們可以借助 Spark 對存儲于 HBase 之中的數(shù)據(jù)進行分析,而且 Spark 本身支持機器學習的。但是如果直接采用開源的 Spark 讀取 HBase 中的數(shù)據(jù),會對 HBase 本身的讀寫有影響的。

針對這些問題,阿里云 HBase 團隊對 Spark 進行了相關優(yōu)化,比如直接讀取 HFile、算子下沉等;并且提供全托管的 Spark 產(chǎn)品,通過SQL服務ThriftServer、作業(yè)服務LivyServer簡化Spark的使用等。目前這套 Spark 的技術棧如下圖所示。

HBase在人工智能場景的使用

 

通過 Spark 服務,我們可以和 HBase 進行很好的整合,將實時流和人臉特征挖掘整合起來,整個架構圖如下:

HBase在人工智能場景的使用

我們可以收集各種人臉數(shù)據(jù)源的實時數(shù)據(jù),經(jīng)過 Spark Streaming 進行簡單的 ETL 操作;其次,我們通過 Spark MLib 類庫對剛剛試試收集到的數(shù)據(jù)進行人臉特征挖掘,***挖掘出來的結果存儲到 HBase 之中。***,用戶可以通過訪問 HBase 里面已經(jīng)挖掘好的人臉特征數(shù)據(jù)進行其他的應用。

責任編輯:未麗燕 來源: 阿里云棲社區(qū)
相關推薦

2020-09-11 07:03:02

人工智能場景

2022-12-15 07:35:04

人工智能語音應用場景

2020-01-03 17:27:56

人工智能AI智慧景區(qū)

2022-04-28 23:27:08

人工智能機器學習工具

2021-08-09 14:44:07

人工智能無人駕駛技術

2021-10-14 09:38:34

人工智能AI深度學習

2022-06-20 11:05:58

通用人工智能機器人

2018-08-17 15:17:56

人工智能層次極端

2021-01-07 22:46:43

人工智能農(nóng)業(yè)疫情

2023-10-17 10:20:23

2022-11-30 07:12:06

2018-02-25 13:09:42

人工智能視頻場景應用現(xiàn)狀

2018-05-18 10:08:15

人工智能移動平臺大數(shù)據(jù)

2024-02-04 10:04:53

人工智能

2023-05-05 14:02:59

人工智能聊天機器人

2017-12-19 11:20:25

人工智能云計算管理工具

2022-07-29 15:47:25

人工智能AI

2022-10-19 07:04:12

?人工智能云服務Alaas

2021-11-05 09:56:36

人工智能AI指數(shù)

2020-08-31 15:15:20

人工智能算法AI
點贊
收藏

51CTO技術棧公眾號