『開發技巧』Python音頻操作工具PyAudio上手教程

『開發技巧』Python音頻操作工具PyAudio上手教程

​

0.引子

當需要使用Python處理音頻數據時,使用python讀取與播放聲音必不可少,下面介紹一個好用的處理音頻PyAudio工具包。

PyAudio是Python開源工具包,由名思義,是提供對語音操作的工具包。提供錄音播放處理等功能,可以視作語音領域的OpenCv。

 

1.簡介

 

PyAudio為跨平台音頻I / O庫PortAudio提供Python 綁定。使用PyAudio,您可以輕鬆地使用Python在各種平台上播放和錄製音頻,例如GNU / Linux,Microsoft Windows和Apple Mac OS X / macOS。

PyAudio的靈感來自:

  • pyPortAudio / fastaudio:PortAudio v18 API的Python綁定。
  • tkSnack:Tcl / Tk和Python的跨平台聲音工具包。

 

2.安裝

 

目前的版本是PyAudio v0.2.11。在大多數平台上使用pip安裝PyAudio。對於v0.2.9之前的版本,PyAudio分發安裝二進制文件,這些文件 存檔在這裏。

 

微軟Windows 

使用pip安裝:

python -m pip install pyaudio

筆記:

  • 如果pip尚未與您的Python安裝捆綁在一起,請在此處獲取 。
  • pip將獲取並安裝PyAudio輪(預先打包的二進制文件)。目前,有車輪兼容Python 2.7,3.4,3.5和3.6 的 官方發行版。對於這些版本,可以使用32位和64位車輪。
  • 這些二進制文件包括使用MinGW構建的PortAudio v19 v190600_20161030。它們僅支持Windows MME API,不包括對DirectX,ASIO等的支持。如果需要支持未包含的API,則需要編譯PortAudio和PyAudio。

 

Apple Mac OS X.

使用Homebrew安裝必備的portaudio庫,然後使用pip安裝PyAudio:

brew install portaudio 
pip install pyaudio

筆記:

  • 如果尚未安裝,請下載 Homebrew。
  • pip將下載PyAudio源代碼併為您的Python版本構建它。
  • Homebrew和構建PyAudio還需要安裝Xcode命令行工具(更多信息)。

 

Debian / Ubuntu

使用包管理器安裝PyAudio:

sudo apt-get install python-pyaudio python3-pyaudio

如果沒有最新版本的PyAudio,請使用pip安裝它:

pip install pyaudio

筆記:

  • pip將下載PyAudio源併為您的系統構建它。請務必事先安裝portaudio庫開發包(portaudio19-dev)和python開發包(python-all-dev)。
  • 為了更好地隔離系統包,請考慮在virtualenv中安裝PyAudio 。

 

PyAudio來源

源代碼可從Python Package Index(PyPI)下載:pypi.python.org/pypi/PyAudio。

或克隆git存儲庫:

git clone https://people.csail.mit.edu/hubert/git/pyaudio.git

要從源代碼構建PyAudio,您還需要構建 PortAudio v19。有關為各種平台構建PyAudio的一些說明,請參閱編譯提示。要使用Microsoft Visual Studio構建PyAudio,請查看Sebastian Audet的說明。

 

 

3.示例

1).採集音頻

下面以一段代碼演示如何從計算機麥克風採集一段音頻,採集音頻時長 4s,保存文件 output.wav

使用了tqdm模塊,可以方便显示出來讀取過程,如下:

* recording
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 172/172 [00:03<00:00, 43.40it/s] 
* done recording

import pyaudio import wave from tqdm import tqdm def record_audio(wave_out_path,record_second): CHUNK = 1024 FORMAT = pyaudio.paInt16 CHANNELS = 2 RATE = 44100 p = pyaudio.PyAudio() stream = p.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True, frames_per_buffer=CHUNK) wf = wave.open(wave_out_path, 'wb') wf.setnchannels(CHANNELS) wf.setsampwidth(p.get_sample_size(FORMAT)) wf.setframerate(RATE) print("* recording") for i in tqdm(range(0, int(RATE / CHUNK * record_second))): data = stream.read(CHUNK) wf.writeframes(data) print("* done recording") stream.stop_stream() stream.close() p.terminate() wf.close() record_audio("output.wav",record_second=4)

要使用PyAudio,首先使用pyaudio.PyAudio()(1)實例化PyAudio ,它設置portaudio系統。

要錄製或播放音頻,請使用pyaudio.PyAudio.open() (2)在所需設備上打開所需音頻參數的流。這設置了pyaudio.Stream播放或錄製音頻。

通過使用流式傳輸pyaudio.Stream.write()音頻數據或使用流式傳輸音頻數據來播放音頻 pyaudio.Stream.read()。(3)

請注意,在“阻止模式”中,每個pyaudio.Stream.write()或 pyaudio.Stream.read()阻止直到所有給定/請求的幀都被播放/記錄。或者,要動態生成音頻數據或立即處理錄製的音頻數據,請使用下面概述的“回調模式”。

使用pyaudio.Stream.stop_stream()暫停播放/錄製,並pyaudio.Stream.close()終止流。(4)

最後,使用pyaudio.PyAudio.terminate()(5)終止portaudio會話

 

2).播放音頻

下面使用播放的功能來播放1)中保存的音頻 output.wav

通過tqdm,显示播放進度條,如下:


100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 172/172 [00:03<00:00, 43.40it/s] 

"""PyAudio Example: Play a WAVE file.""" import pyaudio import wave from tqdm import tqdm def play_audio(wave_path): CHUNK = 1024 wf = wave.open(wave_path, 'rb') # instantiate PyAudio (1) p = pyaudio.PyAudio() # open stream (2) stream = p.open(format=p.get_format_from_width(wf.getsampwidth()), channels=wf.getnchannels(), rate=wf.getframerate(), output=True) # read data data = wf.readframes(CHUNK) # play stream (3) datas = [] while len(data) > 0: data = wf.readframes(CHUNK) datas.append(data) for d in tqdm(datas): stream.write(d) # stop stream (4) stream.stop_stream() stream.close() # close PyAudio (5) p.terminate() play_audio("output.wav")

2).以回調方式播放音頻

當需要在執行其他程序時同時播放音頻,可以使用回調的方式播放,示例代碼如下:

"""PyAudio Example: Play a WAVE file.""" import pyaudio import wave from tqdm import tqdm import time def play_audio_callback(wave_path): CHUNK = 1024 wf = wave.open(wave_path, 'rb') # instantiate PyAudio (1) p = pyaudio.PyAudio() def callback(in_data, frame_count, time_info, status): data = wf.readframes(frame_count) return (data, pyaudio.paContinue) # open stream (2) stream = p.open(format=p.get_format_from_width(wf.getsampwidth()), channels=wf.getnchannels(), rate=wf.getframerate(), output=True, stream_callback=callback) # read data stream.start_stream() while stream.is_active(): time.sleep(0.1) # stop stream (4) stream.stop_stream() stream.close() # close PyAudio (5) p.terminate() play_audio_callback("output.wav")

 

Reference:

1.http://people.csail.mit.edu/hubert/pyaudio/

 

 

【精選推薦文章】

如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

想要讓你的商品在網路上成為最夯、最多人討論的話題?

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

不管是台北網頁設計公司、台中網頁設計公司,全省皆有專員為您服務

想知道最厲害的台北網頁設計公司推薦、台中網頁設計公司推薦專業設計師"嚨底家"!!

聽說你在為天天寫業務代碼而煩惱?

寫業務代碼一般就是完成業務應用的功能,天天寫業務代碼的程序員也被戲稱為CURD程序員,CURD就是增(create)、改(update)、查(read)、刪(delete)的意思。CURD程序員每天的工作內容就是根據業務邏輯需要對數據庫數據進行增刪改查,這在很多人看來是沒有技術含量的,尤其是工作了多年的程序員,認為這無法提高他們的技術能力,寫了十年的業務代碼,卻和寫一年業務代碼的年輕人差別不大,可能對某個框架更為熟悉一點罷了,此外,少有其他方面的優勢。

實際上,每個能正常被使用的業務系統都需要CURD的工作,但僅僅是CURD也是無法完成一個比較複雜的業務系統的。一個業務系統除了需要編寫功能代碼,還要有需求分析、架構設計、詳細設計、功能編寫、測試、集成部署等等工作內容,CURD頂多是功能編寫的子集。因此,如果你的任務只是CURD,那時間長了以後確實可能會厭煩,並且覺得技能得不到提高。也因此,論壇里常有人求助於高手,問怎樣才能脫離這種CURD工作:

高手們的答案也不一致,有的說寫業務代碼同樣牛逼,CURD是核心競爭力呢,有的建議換工作,擺脫CURD,也有的說要做個有心人,多解決實際問題,自然就會提高,等你水平到一定程度了,就可以不做這類工作了。

而在我看來,不寫業務代碼的人,也不一定有多牛掰,他們也不過是根據需求實現一些東西,也需要領域知識和編程技能,只不過有些領域知識和我們常見的上層應用業務知識有比較大的區別。即使是內核開發人員,如果只是負責實現某個模塊,而且他並沒有多少進取心,每天只是讀讀文檔和協議,調調接口來實現功能,沒有深挖原理,也不關注其他方面的技術,沒有全局視角,那他其實頂多也算是一個搬磚的,離高手還是有很大的距離。

而做CURD工作的,也並不是完全學不到東西。CURD從小的方面來說,是老闆的需求,從大的方面來說,是社會需求,需要大量的人來從事這個工作。CURD程序員離業務比較近,有機會可能也必須去更多地理解業務,而業務知識也是一種領域知識,具有深刻的領域知識的人,在職場中是有競爭優勢的。因此,你可以在CURD的同時,多了解業務知識,或者多思考怎麼把CURD做得更好,比如製作一些模板工具,想辦法通過各種方式來提高工作效率,這樣面對同樣的工作時,你會更輕鬆因而也更具有競爭力。如果你真想擺脫或者基本擺脫,那麼在平時就應該注意積累其它方面的知識,能完成其他CURD程序員難以完成的任務,在工作中,你要懂得合理地越俎代庖、份內份外!

越俎代庖本來是個貶義詞,指的是越權辦事、多管閑事的行為,但在這裡是褒義詞。其他同事遇到難題時,你主動幫忙解決,在你自己任務已經完成的情況下,可以研究其他人的工作內容,這樣可以在其他同事只有不太好的實現方案時,適時給出你自己的方案,這樣也不出現搶活邀功的現象。即便你的方案使用不上,你有過自己的思考研究,對自己的成長也是有利的。

可能有同學會說了,你這是站着說話不腰疼,平時加班加點才能完成任務,哪有時間去做這樣的事情。如果是這樣,那你的確難以擺脫這種境況,要不你就安心地每天CURD,要不就換個更適合自己的工作。就我自己而言,工作這麼多年,和行業里其他人相比,加班真的很少,不過我花在學習上的時間,可能會比大部分人都多。這個學習,包括工作的時候去學習其他人的任務所涉及的技能、整個項目的架構原理,以及其它自己認為有用或感興趣的技術。一般來說,工作上的事情,我工作時間就解決可能也順便理解其原理了,而要拓寬知識和技術面,一般就靠下班時間。下班時間學習的東西,有時候也是跟工作內容相關的,即便是不相關的內容,可能也會在你工作時給你帶來靈感,或者有助於你更快理解工作上的事情,這樣的話也使得你能更快速完成工作任務,於是又有更多的時間去學習和擴寬技能,形成一個良性循環。關於良性循環和惡性循環,可以參考我之前的文章:停止無謂抱怨,構建你的良性循環系統。

總之,如果你覺得自己目前就是CURD程序員並且不滿足於此,那你可以先思考如果把CURD做得更好更高效更少出bug,同時盡可能地熟悉業務,爭取在某個業務方向上比普通人更熟悉。因為你最熟悉CURD,可能在換工作時,人家還是傾向於給你提供CURD的崗位,因此如果要擺脫這種境況,就需要你在業餘時間加倍地學習、實踐新技能,然後在機會到來時,才有可能抓住它。“機會永遠只留給有準備的人”,以我的親身體會,這句話在99.9%的情況下應該是正確的,希望我們都記住它!

 

原文發表於:聽說你在為天天寫業務代碼而煩惱?

歡迎關注公眾號:

【精選推薦文章】

如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

想要讓你的商品在網路上成為最夯、最多人討論的話題?

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

不管是台北網頁設計公司、台中網頁設計公司,全省皆有專員為您服務

想知道最厲害的台北網頁設計公司推薦、台中網頁設計公司推薦專業設計師"嚨底家"!!

手把手教你學會 基於JWT的單點登錄

  最近我們組要給負責的一個管理系統 A 集成另外一個系統 B,為了讓用戶使用更加便捷,避免多個系統重複登錄,希望能夠達到這樣的效果——用戶只需登錄一次就能夠在這兩個系統中進行操作。很明顯這就是單點登錄(Single Sign-On)達到的效果,正好可以明目張膽的學一波單點登錄知識。

本篇主要內容如下:

  • SSO 介紹
  • SSO 的幾種實現方式對比
  • 基於 JWT 的 spring boot 單點登錄實戰

注意:
  SSO 這個概念已經出現很久很久了,目前各種平台都有非常成熟的實現,比如OpenSSO,OpenAM,Kerberos,CAS等,當然很多時候成熟意味着複雜。本文不討論那些成熟方案的使用,也不考慮 SSO 在 CS 應用中的使用。

什麼是 SSO

  單點點說就是:一次登錄后可免登陸訪問其他的可信平台。比如我們登錄淘寶網后,再打開天貓首頁可以發現已經是登錄狀態了。SSO 是一種比較流行的服務於企業業務整合的一種解決方案。

如何實現 SSO

  我們都知道目前的 http 協議是無狀態的,也就是第一次請求和第二次請求是完全獨立,不相關的,但現實中我們的業務邏輯都是有狀態的,這樣就引入了 cookie-session 的機制來維護狀態,瀏覽器端存儲一個 sessionId,後台存儲跟該 sessionId 相關的數據。每次向後台發起請求時都攜帶此 sessionId 就能維持狀態了。然後就有了 cookie,瀏覽器在發送請求時自動將 cookie 中的數據放到請求中,發給服務端,無需手動設置。

  然後我們可以考慮考慮實現 SSO 的核心是什麼?答案就是如何讓一個平台 A 登錄后,其他的平台也能獲取到平台 A 的登錄信息(在 cookie-session 機制中就是 sessionId)。

方案一 共享 cookie

  基於 cookie-session 機制的系統中,登錄系統後會返回一個 sessionId 存儲在 cookie 中,如果我們能夠讓另外一個系統也能獲取到這個 cookie,不就獲取到憑證信息了,無需再次登錄。剛好瀏覽器的 cookie 可以實現這樣的效果(詳見web 跨域及 cookie 學習)。

  cookie 允許同域名(或者父子域名)的不同端口中共享 cookie,這點和 http 的同域策略不一樣(http 請求只要協議、域名、端口不完全相同便認為跨域)。因此只需將多個應用前台頁面部署到相同的域名(或者父子域名),然後共享 session 便能夠實現單點登錄。架構如下:

  上面方案顯而易見的限制就是不僅前台頁面需要共享 cookie,後台也需要共享 session(可以用jwt來幹掉 session,但是又會引入新的問題,這裏不展開).這個方案太簡單了,不作進一步說明。

方案二 基於回調實現

  通過上文可以知道,要實現單點登錄只需將用戶的身份憑證共享給各個系統,讓後台知道現在是誰在訪問。就能實現一次登錄,到處訪問的效果,實在是非常方便的。在 session 機制中是共享 sessionId,然後多個後台使用同一個 session 源即可。這裏我們用一種新的基於 JWT 的 token 方式來實現,不了解 JWT 的可以看這篇:java-jwt 生成與校驗,簡單來說 jwt 可以攜帶無法篡改的信息(一段篡改就會校驗失敗),所以我們可以將用戶 id 等非敏感信息直接放到 jwt 中,幹掉了後台的 session。然後我們要做的就是將 jwt 共享給各個平台頁面即可。系統架構如下:

  此架構中,業務系統 A 和業務系統 B 之間不需要有任何聯繫,他們都只和 SSO 認證平台打交道,因此可以任意部署,沒有同域的限制。你可能就要問了這樣要怎麼共享身份憑證(也就是 jwt 字符串)?這裏就要通過 url 參數來進行騷操作了。文字總結來說是這樣的:jwt 存到認證平台前端的 localStore(不一定是 localStore,cookie,sessionStore 都可以),然後業務平台攜帶自己的回調地址跳轉到認證中心的前台,認證中心的前台再將 ujwt 作為 url 參數,跳回到那個回調地址上,這樣就完成了 jwt 的共享。

  文字很可能看不懂,下面是整個過程的路程圖:

相信通過上面的流程圖你應該能大概看明白,jwt 是如何共享了的吧,還看不懂的繼續看下來,下面上一個 spring boot 實現的簡易 SSO 認證。主要有兩個系統:SSO 認證中心,系統 A(系統 A 換不同端口運行就是系統 A、B、C、D 了).

實戰

實現 SSO 認證中心

  spring boot 框架先搭起來,由於是簡易項目,除 spring boot web 基本依賴,只需要如下的額外依賴:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>fastjson</artifactId>
  <version>1.2.4</version>
</dependency>
<dependency>
  <groupId>com.auth0</groupId>
  <artifactId>java-jwt</artifactId>
  <version>3.7.0</version>
</dependency>

完整的 POM 文件,請到 github 上查看.

後台實現

  後台做的事情並不多,只有以下 5 個方法:

  • /login : 登錄成功后簽發一個 jwt token
    在 demo 中只是簡單對比用戶名密碼如果是一樣的認為登錄成功,返回 token
  • /checkJwt : 檢查 jwt 的有效性
    檢查傳來的 jwt-token 是否有效,返回失效的 jwt 列表
  • /refreshjwt : 刷新 jwt
    判斷該 jwt 是否快要過期,如果快要過期,生成一個新的 jwt 返回
  • /inValid : 讓某個 jwt 失效
    jwt 如何失效一直是一個比較麻煩的問題,各有利弊。本例中採用的是為每個 jwt 生成一個隨機的秘鑰 secret,將 jwt–secret 保存到 redis 中,想要讓某個 jwt 失效,只需將該記錄在 redis 中刪除即可(這樣在解密時便無法獲取到 secret)。但是這樣讓無狀態的認證機制變成有狀態了(記錄了 jwt 和 secret 的對應關係)。

  總結來說 SSO 後台主要只做了兩件事:驗證用戶名密碼返回 jwt;驗證 jwt 是否合法。具體代碼查看 github 上 sso 目錄下的代碼。

前台實現

  前台的邏輯較為複雜,不是那麼容易理解,不明白的多看幾遍上面的流程圖。

  再次回到 SSO 的重點:分享登錄狀態。要如何在前台將登錄狀態(在這裏就是 jwt 字符串)分享出去呢?由於瀏覽器的限制,除了 cookie 外沒有直接共享數據的辦法。既然沒有直接共享,那肯定是有間接的辦法的!

  這個辦法就是回調。系統 A 的前台在跳轉到 SSO 的前台時,將當前路徑作為 url 參數傳遞給 sso 前台,sso 前台在獲取到 jwt 后,再跳轉到系統 A 傳過來的 url 路徑上,並帶上 jwt 作為 url 參數。這就完成了 jwt 的一次共享,從 sso 共享到系統 A。

打個比方:你點了個外賣,別人要怎麼把外賣給你呢?顯然你會留下的地址,讓別人帶上飯送到這個地址,然後你就能享用美食了。這和 jwt 的傳遞非常相識了。

系統 A 說:我要 jwt,快把它送到http://localhost:8081/test1/這個地址上。

SSO 說:好嘞,這個地址是合法的可以送 jwt 過去,這就跳轉過去:http://localhost:8081/test1/?jwt=abcdefj.asdf.asdfasf

系統 A 說:不錯不錯,真香。

  要注意這裏有個坑就是:如果另外一個惡意系統 C 安裝相同的格式跳轉到 SSO,想要獲取 jwt,這顯然是不應該給它的。所以在回跳回去的時候要判斷一下這個回調地址是不是合法的,能不能給 jwt 給它,可以向後台請求判斷也可以在 sso 前台直接寫死合法的地址。在 demo 是沒有這個判斷過程的。

實現業務系統

  業務系統代碼非常簡單,主要是用了一個攔截器,攔截 http 請求,提取出 token 向 sso 認證中心驗證 token 是否有效,有效放行,否則返回錯誤給前端。太簡單也不貼代碼了,到 github 上看看就明白了。

效果

  上面說了一大串都是原理了,其實這個難也就難在原理部分,代碼實現並沒有那麼複雜。這裏就不貼代碼了,有需要直接到 github 上看。

  這裏上幾個效果圖:

  • 系統 A 首次登陸系統

可以看到首次登陸是需要跳到 sso 認證中心輸入用戶名密碼進行登陸驗證的。登陸成功回跳後接口請求成功。

  • 將 A 的啟動端口改為 8082 后再次啟動,當作系統 B

可以看到這次是無需登陸的,跳到認證中心后就馬上跳回了,如果去掉 alert 一般是看不出跳轉過程的。

最後在任意一個系統註銷,都會讓所有的系統推出登陸。

可以看到,在系統 A 登錄系統后,系統 B,系統 C 都不再需要輸入用戶名密碼進行登錄。如果速度足夠快甚至都注意不到調到 SSO 再跳回來的過程。

源碼:github

本篇原創發佈於:www.tapme.top/blog/detail/2019-03-01-18-52

【精選推薦文章】

如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

想要讓你的商品在網路上成為最夯、最多人討論的話題?

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

不管是台北網頁設計公司、台中網頁設計公司,全省皆有專員為您服務

想知道最厲害的台北網頁設計公司推薦、台中網頁設計公司推薦專業設計師"嚨底家"!!

設計模式之迭代器與組合模式(四)

因為這系列篇幅較長,所以在這裏也不進行任何鋪墊,直奔主題去啦。

利用組合設計菜單

我們要如何在菜單上應用組合模式呢?一開始,我們需要創建一個組件接口來作為菜單和菜單項的共同接口,讓我們能夠用統一的做法來處理菜單和菜單項。換句話說,我們可以針對菜單或菜單項調用相同的方法。

讓我們從頭來看看如何讓菜單能夠符合組合模式的結構:

實現菜單組件

好了,我們開始編寫菜單組件的抽象類;請記住,菜單組件的角色是為恭弘=恭弘=恭弘=叶 恭弘 恭弘 恭弘節點和組合節點提供一個共同的接口。

public abstract class MenuComponent {
   
    public void add(MenuComponent menuComponent) {
        throw new UnsupportedOperationException();
    }
    public void remove(MenuComponent menuComponent) {
        throw new UnsupportedOperationException();
    }
    public MenuComponent getChild(int i) {
        throw new UnsupportedOperationException();
    }
  
    public String getName() {
        throw new UnsupportedOperationException();
    }
    public String getDescription() {
        throw new UnsupportedOperationException();
    }
    public double getPrice() {
        throw new UnsupportedOperationException();
    }
    public boolean isVegetarian() {
        throw new UnsupportedOperationException();
    }

    public abstract Iterator<MenuComponent> createIterator();
 
    public void print() {
        throw new UnsupportedOperationException();
    }
}

讓我們來看菜單類。別忘了,這是組合類圖裡的恭弘=恭弘=恭弘=叶 恭弘 恭弘 恭弘類,它實現組合內元素的行為。

public class MenuItem extends MenuComponent {
 
    String name;
    String description;
    boolean vegetarian;
    double price;
    
    public MenuItem(String name, 
                    String description, 
                    boolean vegetarian, 
                    double price) 
    { 
        this.name = name;
        this.description = description;
        this.vegetarian = vegetarian;
        this.price = price;
    }
  
    public String getName() {
        return name;
    }
  
    public String getDescription() {
        return description;
    }
  
    public double getPrice() {
        return price;
    }
  
    public boolean isVegetarian() {
        return vegetarian;
    }

    public Iterator<MenuComponent> createIterator() {
        return new NullIterator();
    }
 
    public void print() {
        System.out.print("  " + getName());
        if (isVegetarian()) {
            System.out.print("(v)");
        }
        System.out.println(", " + getPrice());
        System.out.println("     -- " + getDescription());
    }

}

我們已經有了菜單項,還需要組合類,這就是我們叫做菜單的。別忘了,此組合類可以持有菜單項或其他菜單。

public class Menu extends MenuComponent {
    Iterator<MenuComponent> iterator = null;
    ArrayList<MenuComponent> menuComponents = new ArrayList<MenuComponent>();
    String name;
    String description;
  
    public Menu(String name, String description) {
        this.name = name;
        this.description = description;
    }
 
    public void add(MenuComponent menuComponent) {
        menuComponents.add(menuComponent);
    }
 
    public void remove(MenuComponent menuComponent) {
        menuComponents.remove(menuComponent);
    }
 
    public MenuComponent getChild(int i) {
        return menuComponents.get(i);
    }
 
    public String getName() {
        return name;
    }
 
    public String getDescription() {
        return description;
    }

  
    public Iterator<MenuComponent> createIterator() {
        if (iterator == null) {
            iterator = new CompositeIterator(menuComponents.iterator());
        }
        return iterator;
    }
 
 
    public void print() {
        System.out.print("\n" + getName());
        System.out.println(", " + getDescription());
        System.out.println("---------------------");
    }
}

因為菜單是一個組合,包含了菜單項和其他的菜單,所以它的print()應該打印出它所包含的一切。如果它不這麼做,我們就必須遍歷整個組合的每個節點,然後將每一項打印出來。這麼一來,也就失去了使用組合結構的意義。

所以,print還得進行優化,如下:

public void print() {
    System.out.print("\n" + getName());
    System.out.println(", " + getDescription());
    System.out.println("---------------------");
 
    Iterator<MenuComponent> iterator = menuComponents.iterator();
    while (iterator.hasNext()) {
        MenuComponent menuComponent = iterator.next();
        menuComponent.print();
    }
}

看到上面了沒,我們用了迭代器。用它遍歷所有菜單組件,遍歷過程中,可能遇到其他菜單,或者是遇到菜單項。由於菜單和菜單項都實現了print,那我們只要調用print即可。

開始測試數據之前,我們了解一下,在運行時菜單組合是什麼樣的:

開始運行我們的測試程序啦:

public class MenuTestDrive {
    public static void main(String args[]) {

        MenuComponent pancakeHouseMenu = 
            new Menu("PANCAKE HOUSE MENU", "Breakfast");
        MenuComponent dinerMenu = 
            new Menu("DINER MENU", "Lunch");
        MenuComponent cafeMenu = 
            new Menu("CAFE MENU", "Dinner");
        MenuComponent dessertMenu = 
            new Menu("DESSERT MENU", "Dessert of course!");
  
        MenuComponent allMenus = new Menu("ALL MENUS", "All menus combined");
  
        allMenus.add(pancakeHouseMenu);
        allMenus.add(dinerMenu);
        allMenus.add(cafeMenu);
  
        pancakeHouseMenu.add(new MenuItem(
            "K&B's Pancake Breakfast", 
            "Pancakes with scrambled eggs, and toast", 
            true,
            2.99));
        pancakeHouseMenu.add(new MenuItem(
            "Regular Pancake Breakfast", 
            "Pancakes with fried eggs, sausage", 
            false,
            2.99));
        pancakeHouseMenu.add(new MenuItem(
            "Blueberry Pancakes",
            "Pancakes made with fresh blueberries, and blueberry syrup",
            true,
            3.49));
        pancakeHouseMenu.add(new MenuItem(
            "Waffles",
            "Waffles, with your choice of blueberries or strawberries",
            true,
            3.59));

        dinerMenu.add(new MenuItem(
            "Vegetarian BLT",
            "(Fakin') Bacon with lettuce & tomato on whole wheat", 
            true, 
            2.99));
        dinerMenu.add(new MenuItem(
            "BLT",
            "Bacon with lettuce & tomato on whole wheat", 
            false, 
            2.99));
        dinerMenu.add(new MenuItem(
            "Soup of the day",
            "A bowl of the soup of the day, with a side of potato salad", 
            false, 
            3.29));
        dinerMenu.add(new MenuItem(
            "Hotdog",
            "A hot dog, with saurkraut, relish, onions, topped with cheese",
            false, 
            3.05));
        dinerMenu.add(new MenuItem(
            "Steamed Veggies and Brown Rice",
            "A medly of steamed vegetables over brown rice", 
            true, 
            3.99));
 
        dinerMenu.add(new MenuItem(
            "Pasta",
            "Spaghetti with Marinara Sauce, and a slice of sourdough bread",
            true, 
            3.89));
   
        dinerMenu.add(dessertMenu);
  
        dessertMenu.add(new MenuItem(
            "Apple Pie",
            "Apple pie with a flakey crust, topped with vanilla icecream",
            true,
            1.59));
        dessertMenu.add(new MenuItem(
            "Cheesecake",
            "Creamy New York cheesecake, with a chocolate graham crust",
            true,
            1.99));
        dessertMenu.add(new MenuItem(
            "Sorbet",
            "A scoop of raspberry and a scoop of lime",
            true,
            1.89));

        cafeMenu.add(new MenuItem(
            "Veggie Burger and Air Fries",
            "Veggie burger on a whole wheat bun, lettuce, tomato, and fries",
            true, 
            3.99));
        cafeMenu.add(new MenuItem(
            "Soup of the day",
            "A cup of the soup of the day, with a side salad",
            false, 
            3.69));
        cafeMenu.add(new MenuItem(
            "Burrito",
            "A large burrito, with whole pinto beans, salsa, guacamole",
            true, 
            4.29));
 
        Waitress waitress = new Waitress(allMenus);
   
        waitress.printVegetarianMenu();
 
    }
}

結果這裏就不附上了,請大家自行去跑代碼實現吧。相信你們又對組合模式也已經有了一個大概了吧。下一篇,還有更犀利的,組合迭代器等着我們。小編馬上回去搞起來,安排上。

愛生活,愛學習,愛感悟,愛挨踢

【精選推薦文章】

如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

想要讓你的商品在網路上成為最夯、最多人討論的話題?

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

不管是台北網頁設計公司、台中網頁設計公司,全省皆有專員為您服務

想知道最厲害的台北網頁設計公司推薦、台中網頁設計公司推薦專業設計師"嚨底家"!!

​解讀浪潮“元腦”:不是AI大腦,欲引爆AI應用的工業化量產

​解讀浪潮“元腦”:不是AI大腦,欲引爆AI應用的工業化量產

2019-04-24 15:26    來源:廠商稿  作者: 廠商動態 編輯:
0購買

  文章來源:雲科技時代

  2016年以來,AI人工智能遍地開花。以神經元網絡為代表的深度學習成為了風靡大街小巷的熱詞,人工智能和深度學習技術創業公司如雨後春筍般湧現,各種深度學習開源框架、人工智能大腦和服務以及國際AI大賽跑分成為常態。進入2019年,全國共有35所高校獲首批“人工智能”新專業建設資格、96所高校獲批“智能科學與技術”專業、101所高校獲批“機器人工程”專業,人工智能也入選了《普通高中信息技術課程標準》新課標。

  儘管全民對於人工智能的熱情高漲,但人工智能的產業化以及在各產業和行業中推進人工智能應用,仍面臨着重重阻礙。“當前人工智能計算的業態還是相當分散的,需要買不同的機器、服務和加速卡等,還要自己配置人工智能應用環境、搭建人工智能框架,處理數據、模型和計算的管理、共享、調度等,這對客戶來說太複雜了,不知道怎麼做。”浪潮AI與HPC總經理劉軍在4月16日2019浪潮雲數據中心合作夥伴大會(IPF2019)上接受採訪時坦言,“合作夥伴更怕在幾十種選擇中組合,人工智能的生意很難做。”

  2018年Gartner與中國信通院合作的《2018世界人工智能產業發展藍皮書》也指出:人工智能仍處於早期採用階段,僅有4%的被調研企業已經投資並部署了AI技術,許多企業還處在正在考慮採用AI和規劃AI的階段。在Gartner的AI技術成熟度曲線中,仍有許多AI的相關技術都擁堵在期望膨脹期,要過渡到生產實施階段仍非常困難。此外,AI技術的碎片化十分嚴重,據藍皮書統計在中國市場就有上千家各類AI技術供應商。

  在IPF2019大會上,浪潮發布了“元腦”:打包了計算、算法、框架、PaaS以及服務的一站式人工智能解決方案交付。劉軍表示,“元腦”不是人工智能“大腦”,而是“大腦”的核心,浪潮希望與合作夥伴一起,基於“元腦”快速“量產”各行業的人工智能應用和“大腦”。劉軍表示,“元腦”的意義不亞於當年的福特T型車,福特並不是汽車的發明者,但T型車開創了汽車工業化時代,浪潮也希望“元腦”能開創人工智能應用的工業化時代。

  

  浪潮發布“元腦”

  1908年福特T型車的啟示

  1908年是人類歷史上一個重要的年份,這一年福特推出了歷史上著名的T型車。1903年成立的福特公司,並不是汽車的發明者。從1886年的世界上第一輛四輪汽車,到1893年發明了化油器以及1896年發明了石棉製動片和轉向盤等,汽車的結構越來越趨向現代汽車。但1908年的福特T型車,則首次讓汽車以低廉的價格走入了尋常百姓家,T型車不僅開創了現代汽車工業,更成就了“車輪上的國家”——美國。

  T型車的生產製造過程,開創了革命性的流水裝配線,代替了之前的個體手工製作方式。T型車是世界上第一種以大量通用零部件進行大規模流水線裝配作業而生產製造出來的汽車,1913年到1914年經過優化的流水裝配線可以在93分鐘內生產一輛汽車,超過同期其它所有汽車生產商生產能力的總合。最開始,T型車以競爭車型1/3的價格推動了汽車的普及,1920年後進一步降低到其它競爭車型1/10價格,讓普通生產線工人也能購買屬於自己的汽車。直到1927年停產,共生產了1500萬輛T型車,這一紀錄保持了近一個世紀。

  浪潮“元腦”就是福特T型車這樣的定位:不僅要開創人工智能應用的工業化量產,還要創造T型車這樣的爆款產品。此前,浪潮已經推出了一個AI爆款產品,這就是2017年推出的AGX-2 2U GPU服務器。2017年5月,浪潮推出了第一版的AGX-2 2U GPU服務器,當時是全球首款在2U空間內高速互聯集成8顆最高性能GPU加速器的服務器,2018年3月更新支持了最新的NVIDIA架構,成為全球性能最高的AI 2U服務器。儘管後來浪潮又發布了超級AI服務器AGX-5,但AGX-2仍然是受到廣大用戶喜歡的爆款產品。

  在運營商領域:浪潮AGX-2中標中國電信人工智能服務器集中採購,份額高達40%,大規模用於智能營業廳、智能推薦等場景人工智能訓練;中國移動子公司咪咕文化科技有限公司(簡稱:咪咕)2018年GPU服務器採購項目中,浪潮獲得億元採購訂單一半份額,為咪咕提供涵蓋創新AI服務器AGX-2在內的AI解決方案。在金融領域:AGX-2幫助招商銀行建設了先進的大數據智能平台以及多種人工智能應用場景。在視頻物聯等領域:海康威視的視頻人工智能訓練平台100%基於AGX-2,而大華以AGX-2為核心的人工智能解決方案,在智慧城市、雪亮工程、平安城市等多個領域落地。

  有了前面的這些市場基礎,在2019年,浪潮希望進一步高度集成AI技術、產品和服務於“元腦”,用“元腦”打開人工智能應用的工業化生產變革。

  浪潮“元腦”的構成

  什麼是浪潮“元腦”呢?具體來說包括以下組成部分:

  · 超強AI計算系統:通過浪潮人工智能計算平台、人工智能超高速計算加速卡、極低延遲RDMA網絡與超高帶寬并行存儲,共同提供極致人工智能計算性能;

  · 敏捷AI Paas平台:由極致優化的AI資源平台、極速流程化AI開發平台、開放兼容的AI生態平台和秒速構建AI軟件棧。最新開發的人工智能PaaS平台AIStation面向人工智能企業訓練場景,可實現容器化部署、可視化開發、集中化管理等,有效打通開發環境、計算資源與數據資源,提升開發效率;

  · 高效的Auto ML Suite:最新開發的AutoML Suite可實現非專業人員亦能通過極少操作構建網絡模型並獲得高精度,極大降低了人工智能開發、應用的門檻和成本。在2018年的NIPS 的自動機器學習挑戰賽中,浪潮與北京郵電大學、中南大學團隊合作,獲得自動機器學習領域的國際頂尖賽事的全球第三佳績。

  · 整合一體化交付:計算/存儲/網絡一體化、內置AI Paas平台、內置建模優化工具、預配置系統調優。

  

  中國工程院院士、浪潮集團執行總裁王恩東

  IPF 2019大會的主題為“智慧凝聚”,中國工程院院士、浪潮集團執行總裁王恩東的大會主題演講題目為《人工智能計算 未來核心動力》以及提出了人工智能三大趨勢——融合、開放、敏捷,這兩大主題和三大趨勢都透露了浪潮要“凝聚”過去幾年在人工智能方面的重大投資,並希望用融合、開放和敏捷的人工智能產品及解決方案拉升数字經濟大勢的想法和思路。而浪潮“元腦”就是基於融合、開放和敏捷的人工智能工業化生產線裝配出來的“T型車”。

  激進拉升千億市場到萬億

  “2018年,浪潮與合作夥伴一起創造了諸多令人振奮的成績,見證了服務器產業的快速發展,也體驗了人工智能產業的爆髮式增長。”王恩東在IPF 2019上如是表示。他認為,人工智能發展能為中國經濟帶來巨大增長機遇,據有關預測,到2035年人工智能領域的經濟總量將佔所有經濟的20%,所以“計算力就是生產力,而人工智能計算則是核心計算力”。

  在人工智能時代,浪潮認為有兩大市場:一個是千億的人工智能產業市場,另一個是萬億的產業人工智能市場。一方面,浪潮通過技術產品化、產品市場化,推動AI科技公司的技術成果轉化,也就是AI產業化的過程,創造和實現千億市場價值。另一方面就是產業AI化,即在傳統產業和行業的轉型和升級中,行業ISV和分銷渠道商鏈接着眾多客戶,浪潮通過生態協作方式,把AI計算平台、AI科技公司的技術能力和ISV的行業方案進行整合,通過分銷渠道交付到各行各業,從而撬動萬億級市場。

  那麼,如何普及人工智能計算這種先進的新型生產力?生產力有三大要素:生產力、生產工具和生產資料。其中,浪潮“元腦”就已經交付了先進了生產工具。浪潮集團副總裁彭震強調,浪潮“元腦”提供了一體化的解決方案,把浪潮的人工智能計算能力、存儲能力、網絡能力以及人工智能PaaS平台、AutoML Suite自動算法調優工具等集合在一起,通過浪潮專家的預配置、預調優、預集成,實現了完整平台級解決方案。

  

  浪潮集團副總裁彭震

  接下來就需要把浪潮“元腦”這樣的先進生產工具交付到更多的勞動者手中,讓他們在數據這種新型“生產資料”上,創造更多新型的人工智能應用。為了達成這一目標,光依靠浪潮自己遠遠不夠,還需要動員龐大渠道生態合作夥伴體系。截止至2018年底,浪潮共有9000多家合作夥伴,人工智能百強超過80家與浪潮建立了合作關係;合作夥伴業務增長116%,分銷夥伴增長124%;浪潮與合作夥伴開發聯合解決方案400多個,其中人工智能聯合方案20多個。

  為了把合作夥伴帶入人工智能時代,讓更多的合作夥伴儘早入場人工智能,劉軍表示浪潮將有可能採取激進的策略,包括激進的價格策略以激發整體的人工智能大市場。劉軍強調,人工智能產業和產業人工智能化都處於初期階段,浪潮在這個階段的策略不是自己實現更多的營收,而是要拉動合作夥伴都能獲益。儘管很多合作夥伴對於如何做人工智能生意還有很大的困惑,但劉軍認為“不要在岸上看,一起下來‘游泳’”。

  當然,浪潮也做好了充分的準備。浪潮集團渠道管理部總經理王峰在IPF 2019上提出了浪潮合作生態2.0,將要扮演的三個新角色:生態孵化器、AI試驗場和AI放大器。生態孵化器指的是浪潮將積極幫助AI技術公司、行業ISV以及分銷商,完成AI產品、應用和市場孵化,特別是針對區域行業客戶的AI場景,以及培養更多的AI人才;AI試驗場,指的是浪潮“元腦”與AI技術公司針對不同AI場景應用的聯合方案開發、預裝與轉售,通過浪潮方案創新平台InCloud Lab與行業ISV完成AI產品和方案的POC測試和驗證,以及通過浪潮分銷業務體系面向中小行業客戶的AI應用一體化產品;AI放大器,指的是浪潮將與合作夥伴、AI算法夥伴、AI場景應用+行業ISV夥伴一起,完成多行業的複製、推動多產業的AI化,其中包括面向全行業的行業標桿客戶AI應用以及面向區域市場客戶的一體化AI應用方案產品。

  浪潮在AI渠道總體上的2019目標是:發展 200家AI算法夥伴,每個夥伴要有面向行業場景的算法軟件,至少發布一個AI場景應用、培養AI場景應用認證工程師;發展400家AI方案集成夥伴 ,每個夥伴要有行業應用解決方案、行業AI應用整合和交付能力,要落地三個行業客戶AI應用方案、舉行一次行業客戶AI應用推薦、培養AI行業應用認證工程師;以及80家分銷商和2400經銷商組成的AI方案產品銷售夥伴,每個夥伴要有區域客戶AI應用產品交付和服務能力,每個分銷商要激活30家AI產品銷售經銷商以及通過AI應用產品銷售工程師認證。

  2019年,浪潮渠道還將特別聚焦計算機視覺、語音識別、自然語言識別、量化交易等四大基礎AI應用場景,集中發展100家以上算法合作夥伴,幫助400家以上的行業ISV建立AI能力,在金融、企業、通信、教育、零售、醫療、媒體和互聯網等8大行業落地客戶。

  總體來說,IPF 2019拉開了人工智能應用的工業化時代,是浪潮過去幾年在人工智能計算領域投資的大匯總和高度凝練,是對渠道生態合作夥伴的總動員,其意義不亞於浪潮在2015年所提出的“計算+”戰略及“硬件重構”和“軟件定義”核心。在智慧時代,AI與產業深度融合的大幕已經拉開,“融合、開放、敏捷”將要定義新的計算力——人工智能計算。

,

網站內容來源http://server.it168.com/本站聲明:網站內容來源http://www.it168.com/,如有侵權,請聯繫我們,我們將及時處理

【精選推薦文章】

如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

想要讓你的商品在網路上成為最夯、最多人討論的話題?

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

不管是台北網頁設計公司、台中網頁設計公司,全省皆有專員為您服務

想知道最厲害的台北網頁設計公司推薦、台中網頁設計公司推薦專業設計師"嚨底家"!!

ASC19完美落幕:台灣清華大學獲得全球總冠軍

ASC19完美落幕:台灣清華大學獲得全球總冠軍

2019-04-27 18:32    原創  作者: 謝濤 編輯:
0購買

  【IT168 現場報道】4月25日,2019 ASC世界大學生超級計算機競賽(ASC19)總決賽閉幕式暨頒獎儀式在海創大連科技交流中心隆重舉行。至此,ASC競賽正式走過了它的第八個年頭。

  根據大賽組委會評定,由台灣清華大學奪得總冠軍,清華大學獲得亞軍,中山大學獲得e Prize計算挑戰獎,北京航空航天大學獲得最高計算性能獎,哥倫比亞EAFIT大學、暨南大學、南方科技大學獲得應用創新獎,哥倫比亞EAFIT大學、南方科技大學獲得最佳人氣獎。

  “超級團隊獎”最終由中山大學、太原理工大學、香港中文大學、德國埃爾朗根-紐倫堡大學組成的團隊獲得。超級團隊對抗賽於今年首次設置,進入決賽的20強隊伍以現場抽籤的方式組成了5個超級團隊,以跨團隊合作的形式共同完成超級賽題“Fluidity”,此項賽題的成績不計入總決賽結果,僅用於評定“超級團隊獎”。

  作為由中國發起的世界最大規模的大學生超算競賽,ASC競賽旨在通過大賽平台推動各國及地區間超算青年人才交流和培養,提升超算應用水平和研發能力,發揮超算的科技驅動力,促進科技與產業創新。

  本屆ASC超算競賽由亞洲超算協會、浪潮集團和大連理工大學等單位聯合主辦,共有來自全球不同地區的300餘支高校隊伍報名,並在預賽期間決出20強戰隊,參加全球總決賽。

  賽題設置涵蓋多個前沿應用領域

  在賽題設置上,ASC超算競賽一直緊密關注信息技術的前沿應用領域。本屆賽題涵蓋了氣候、流體力學、生命科學、材料計算、人工智能等領域,包括超級計算機性能基準測試HPL&HPCG、全球氣候變化模式CESM、人工智能賽題人臉圖像超分辨率(Face SR)、中國科學家研發的第三代基因測序組裝軟件wtdbg2、神秘應用賽題ShengBTE,以及超級團隊對抗賽賽題Fluidity。

  關於神秘賽題與超級團隊賽題,ShengBTE軟件包由法國的Mingo和Carrete教授共同開發,是一個基於完整的迭代解決方案求解聲子的玻爾茲曼輸運方程軟件包。Fluidity 是計算流體力學的三維軟件包,基於有限元/控制體積法,能夠解決網格的任意移動和網格分辨率隨時間的變化而變化的問題。

ASC發起人、中國工程院院士、浪潮集團首席科學家王恩東

  閉幕式上,ASC發起人、中國工程院院士、浪潮集團首席科學家王恩東先生在致辭中表示:“今年的ASC賽題涵蓋了眾多前沿應用領域,意在幫助大學生們提高動手實踐能力、開拓創新思維,同時鼓勵創新、激勵學生們不斷向科學高峰攀登。未來,希望ASC大賽能夠持續推動超算人才的培養,推動超算與人工智能的融合發展,推動科技與社會的進步。”

  參賽隊伍表現優異,創造更多亮眼瞬間

  根據決賽規則,各隊需要採用組委會統一提供的硬件設備,完成超算系統搭建與調試,並在功耗不高於3000W的約束下完成以上賽題。

  成功奪得總冠軍獎盃的台灣清華大學代表隊,在HPL、HPCG、CESM以及ShengBTE等賽題上均取得了非常好的成績,整體表現優異,冠軍當之無愧。

  在基準測試HPL方面,預賽階段曾獲得第一名好成績的北京航空航天大學代表隊創下每秒50.21萬億次浮點運算性能的驚艷成績,獲得最高計算性能獎。成為繼ASC18台灣清華大學之後,刷新ASC大賽該項記錄又一支優秀隊伍。

  在超級團隊對抗賽中,中山大學代表隊的表現同樣讓人眼前一亮。中山大學隊員另闢蹊徑,使用了Docker技術製造鏡像,並分發給團隊中的兄弟隊伍使用,避免了複雜的安裝過程,最終幫助團隊獲得了“超級團隊獎”。

  ASC19完美落幕

  隨着計算力的提高,高性能計算(HPC)在科研以及互聯網、醫療、製造、金融等更多領域擁有廣泛應用,已成為科研與產業創新發展的重要支撐。如今,整個行業對HPC技術與應用人才的需求十分迫切。ASC大賽不僅激發了大學生對HPC的興趣與熱愛,培養了學生的動手實踐與創新思維能力,更為全球各個國家的年輕人才搭建了一個互相學習與交流的平台。隨着ASC影響力與規模的持續擴大,相信它將進一步驅動HPC行業的發展與進步。

, ,

本站聲明:網站內容來源http://www.it168.com/,如有侵權,請聯繫我們,我們將及時處理

【精選推薦文章】

如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

想要讓你的商品在網路上成為最夯、最多人討論的話題?

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

不管是台北網頁設計公司、台中網頁設計公司,全省皆有專員為您服務

想知道最厲害的台北網頁設計公司推薦、台中網頁設計公司推薦專業設計師"嚨底家"!!

應對全球氣候變化必需超算!中山大學再攬ASC19 e Prize計算挑戰獎

應對全球氣候變化必需超算!中山大學再攬ASC19 e Prize計算挑戰獎

2019-04-29 10:06    來源:廠商稿  作者: 廠商動態 編輯:
0購買

  4月25日,在2019 ASC世界大學生超級計算機競賽(ASC19)總決賽中,中山大學代表隊一舉奪得引人矚目的e Prize計算挑戰獎,將地球系統模式CESM的全模式運算時間縮短至1.83小時。這也是中山大學第二次獲得該項殊榮,ASC15總決賽中山大學針對SKA (平方公里射電望遠鏡陣列)的天文計算Gridding軟件實現了600倍的加速效果,獲得當年的e Prize計算挑戰獎。

  

  CESM:全球頂級超算中的“殺手級”應用

  地球系統模式CESM是當今國際上最先進、應用最為廣泛的氣候模型,同時也是聯合國政府間氣候變化專門委員會(IPCC)撰寫第五和第六次評估報告所使用的主要氣候模型之一。CESM是一個完全耦合的氣候模型,包括了大氣、陸地、海洋、海冰、陸冰等幾大模塊,利用物理、化學、流體力學等方程式,外加由實際觀測得到的氣候場資料作為起始狀態,最終在超級計算機上再現氣候變化的過程。科學家們運用CESM來模擬海洋生態系統與溫室氣體的相互作用,臭氧、粉塵和其他大氣化學物質對氣候的影響,大氣、海洋和地表的碳循環,以及溫室氣體對高層大氣的影響等,還可以探索更廣闊的應用空間。

  CESM對計算資源的需求十分巨大,是神威·太湖之光、天河二號、泰坦等全球頂級超級計算機中的“殺手級”應用。一方面,全球氣候變化是一個長期過程,利用CESM進行氣候變化模擬通常需要模式積分幾百年甚至上千年,需要處理的數據量非常巨大;另一方面,CESM可以提供從數公里到數百公里跨度的不同精度模擬,依據不同的模擬場景和算例的分辨率,計算核心數量可從數百個擴展到數百萬個。因此,如何更好的優化CESM運算進程,已成為計算地球科學領域一個重要研究課題。

  中山大學成功提速CESM

  ASC19組委會統一提供了2010年的全球大氣歷史數據,要求總決賽20強隊伍在3000W功耗約束下自行設計構建超算系統,在限定時間內完成CAM4、CAM5兩個大氣模式的計算,以及在二氧化碳濃度翻倍的條件下CESM的全模式計算。經過實際測試,在ASC統一提供的8台浪潮AI超算服務器NF5280M5組成的集群中(功耗限制3000W),使用標準CESM模型運行該數據集需4小時完成計算。而參賽隊伍出於其他賽題的考慮,大多選擇異構超算系統設計,CPU計算資源普遍不足,因此必須對CESM氣候模型進行優化,才能在限定的時間內完成賽題並確保運算精度。

  中山大學代表隊在決賽前對CESM進行了細緻的分析,認為CESM大氣分量模式的動力框架及物理過程的計算是影響程序程序性能的主要模塊,程序整體受內存訪問的影響極大,多個分量模式在計算中可實現進程復用。因此,中山大學代表隊在決賽中設計出CESM的多線程運行方法,對進程通訊、內存訪問以及向量化等進行大量優化,在7台浪潮AI超算服務器NF5280M5組成的超算系統中,成功將CESM全模式運算時間縮短至1.83小時,一舉摘得本屆大賽的e Prize計算挑戰獎。

  中山大學代表隊指導老師豐光南表示:“很高興看到ASC又一次將國際大科學工程中的核心HPC應用帶到比賽中來,地球系統模式CESM是很多科學家在實際科研中會用到的一個前沿應用,這種賽題設計會讓學生提前感受到真實的科研環境,激發他們對科學的興趣和熱情,同時也會推動應用的發展。”

  

  作為CESM賽題的提供方,中國科學院大氣物理研究所所長助理、LASG國家重點實驗室副主任周天軍表示:“CESM賽題一方面會讓大學生們接觸到目前國際上最前沿的氣候變化科學工程,另一方面決賽中特別設置的二氧化碳濃度變化運算,也會讓每個人切身感受到因碳排放量增加引發的全球變暖,將對人類生存環境帶來哪些巨大影響,進而建立更好的環保意識。”

  e Prize計算挑戰獎不斷激發創新思維

  e Prize計算挑戰獎是ASC競賽獨有的一個獎項,其命名中的“e”既是科學中最重要的自然常數,同時也代表着人類下一個超級計算機性能的挑戰目標——百億億次(exascale)。ASC希望e Prize計算挑戰獎能成為青年人才的戈登·貝爾獎(Gordon Bell Prize),鼓勵人才勇於解決超算應用難題敢於挑戰計算性能極限,激勵青年人才利用超級計算機推動科學與工程領域實現應用突破。

  歷屆“e Prize計算挑戰獎”賽題涵蓋石油勘探、宇宙天文、人工智能、地球海洋等領域,在激勵大學生創新熱情,促進大規模超算應用發展方面已取得了良好的效果。ASC16,華中科技大學代表隊針對深度學習DNN智能語音識別應用,設計了非常出色的深度神經網絡優化方案,對涉及英文、中文普通話、四川方言三個語種共約60萬條語音數據實現了高準確度訓練模型,並將計算性能最高提升108倍。ASC17,清華大學代表隊在神威·太湖之光上成功將高分辨率海洋數值模擬模式MASNUM擴展到萬核以上並將運行速度提升392倍。ASC18,上海科技大學在微軟機器閱讀理解賽題中,針對模型算法和訓練性能提出了自己獨特的創新及改進,8小時內完成大規模數據集的并行模型訓練,並實現46.46的高預測精度,接近世界前沿先進水平。

  未來,隨着越來越多困擾人類的重大問題被選定為“e Prize計算挑戰獎”試題,全球年輕的超算天才們將憑藉自己的智慧,利用超算更好的造福人類。

  ASC 世界大學生超級計算機競賽(ASC Student Supercomputer Challenge)由中國發起組織,並得到亞洲及歐美相關專家和機構支持,旨在通過大賽平台推動各國及地區間超算青年人才交流和培養,提升超算應用水平和研發能力,發揮超算的科技驅動力,促進科技與產業創新。大賽迄今已連續舉行8屆,共吸引了全球超過7000名大學生參賽,是目前全球規模最大、參与人數最多的大學生超算賽事。ASC19由亞洲超算協會、浪潮集團和大連理工大學聯合舉辦。

,

本站聲明:網站內容來源http://www.it168.com/,如有侵權,請聯繫我們,我們將及時處理

【精選推薦文章】

如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

想要讓你的商品在網路上成為最夯、最多人討論的話題?

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

不管是台北網頁設計公司、台中網頁設計公司,全省皆有專員為您服務

想知道最厲害的台北網頁設計公司推薦、台中網頁設計公司推薦專業設計師"嚨底家"!!

Veritas與華為雲簽署合作諒解備忘錄推進雲數據安全進階

Veritas與華為雲簽署合作諒解備忘錄推進雲數據安全進階

2019-04-30 05:22    原創  作者: 陶然 編輯:
0購買

  近日,Veritas Technologies與華為雲在以“+AI, Grow with Intelligence”為主題的華為雲新加坡峰會上籤署了合作諒解備忘錄(MoU),雙方將攜手在數據保護領域開展深度合作,針對亞太市場在公有雲的雲數據保護與災難恢復領域建立深度合作夥伴關係。

  在数字化經濟的今天,大數據、雲計算、人工智能領域均在快速增長,我們深知數據對企業的重要意義。企業在提高數據驅動力,推進企業變革,實現現代智能化各方面提出了更高要求—— 如何在滿足愈加嚴格的數據保護條例並確保企業核心業務數據得到保障的同時,充分利用雲優勢,從企業豐富的數據中獲取商業洞察,從容快速地實現雲的数字化轉型之旅。

  Veritas亞太及日本地區渠道聯盟高級總監Gary Sievers表示:“此次合作諒解備忘錄建立在雙方深度合作的基礎之上,Veritas將與華為雲一道致力於為共同客戶提供更為可靠有效、經濟實惠的數據保護解決方案,幫助企業更從容自由的選擇雲,應對在數據管理方面的挑戰,從而提升企業核心競爭優勢。”

  華為雲亞太總裁王紅新表示:“Veritas擁有行業領先的技術和深厚的專業經驗,是業內的佼佼者與先鋒,華為雲將利用自身完善的本地服務團隊和生態平台,為 Veritas 提供專業的技術支持和 SLA 保障,解決後顧之憂,這也是我們對 Veritas 信賴的回饋和承諾。華為雲會與Veritas一同沉下心來打造適合亞太市場需要的公有雲數據保護解決方案。”

本站聲明:網站內容來源http://www.it168.com/,如有侵權,請聯繫我們,我們將及時處理

【精選推薦文章】

如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

想要讓你的商品在網路上成為最夯、最多人討論的話題?

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

不管是台北網頁設計公司、台中網頁設計公司,全省皆有專員為您服務

想知道最厲害的台北網頁設計公司推薦、台中網頁設計公司推薦專業設計師"嚨底家"!!

“戴爾科技集團合作夥伴計劃”助力夥伴匯聚集團力量加速業務成長

“戴爾科技集團合作夥伴計劃”助力夥伴匯聚集團力量加速業務成長

2019-05-01 13:35    原創  作者: 陶然 編輯:
0購買

  戴爾科技集團公布了“Dell EMC合作夥伴計劃”的最新演進,該計劃現命名為“戴爾科技集團合作夥伴計劃”。通過這項計劃,合作夥伴可以得到戴爾科技集團的全力支持。這項計劃為合作夥伴賦予了戴爾科技集團的競爭優勢,使之能夠藉助轉型解決方案開拓更多業務。經過改進的計劃將提供更簡便的參与方式來促進合作夥伴交叉銷售,採購整個戴爾科技集團家族的產品及解決方案。

  戴爾科技集團全球渠道、OEM、IoT解決方案事業部總裁Joyce Mullen表示:“合作夥伴要求我們簡化整個戴爾科技集團產品組合的經營方式,因此,我們將其列為重中之重。通過為合作夥伴提供清晰的路線圖,並在他們的技能培訓和發展上加大投入,我們將助力合作夥伴贏得更多生意、實現業務增長。”

  今年二月,戴爾宣布通過購買的VMware解決方案將計入Dell EMC合作夥伴計劃認證級別的考核標準。如今,戴爾將這項福利的覆蓋範圍擴大,包括通過戴爾科技集團合作夥伴計劃購買的戰略聯盟業務(SAB)解決方案的所有銷售額。

  教育投資

  對戴爾科技集團的合作夥伴而言,要想在市場上擁有差異化優勢,關鍵是要掌握正確的銷售技能和部署創新的解決方案。戴爾科技集團宣布了兩款新解決方案資質,由已上市的認證組成,旨在檢驗合作夥伴對解決方案的全方位支持和部署能力。新解決方案資質主要面向戴爾科技雲平台和戴爾科技集團虛擬桌面基礎架構(VDI)。

  根據戴爾科技集團合作夥伴計劃,公司將發布一項新的雲技能,以支持新發布的戴爾科技集團雲解決方案。該技能包含戴爾科技雲平台資質和VxRail服務交付能力等多項認證。去年,許多合作夥伴都獲得了這項技能,這意味着他們擁有了基本部署認證來應用這項新的技能,完整的雲能力認證要求將於第三季度公布。

  戴爾科技集團期望通過此類合作夥伴計劃,對通過聯合解決方案的戰略聯盟業務所取得的相關認證/證書給予承認。

  戴爾科技集團合作夥伴計劃的推出正值公司圍繞市場領先的存儲技術和下一代雲計算解決方案大舉拓展合作夥伴商機之際:

  戴爾科技集團已對更多的存儲產品提供更高的前端折扣,其中包括PowerVault ME4和Compellent SC。在北美地區,優選合作夥伴計劃(Partner Preferred Program)新增了數百家實力雄厚的公司,這既能為合作夥伴創造更多的業務機會,又能催生更具競爭力的定價和激勵措施。

  戴爾科技集團發布了兩項全新的整合解決方案,它將賦予合作夥伴改變市場格局的能力:

  戴爾科技雲平台。這是一項經過驗證的解決方案。它採用了搭載VMware Cloud Foundation的VxRail,可為合作夥伴提供更整合、更簡單的解決方案,使其成為客戶值得信賴的顧問。

  戴爾科技集團統一工作空間(Unified Workspace)。統一工作空間中的ProDeploy使用了VMware Workspace One和終端安全(Endpoint Security)進行部署,它結合了戴爾筆記本電腦的內置安全與Dell SafeGuard及Response.具備服務資質的合作夥伴,可通過現場服務的共同交付來獲得絕佳的附加服務機會。

  此外,戴爾科技集團還進一步增強了其世界一流金融服務產品的價值,其中一項產品就是近來已拓展到HCI解決方案(包括VxRail和VxRack)的Flex on Demand。

本站聲明:網站內容來源http://www.it168.com/,如有侵權,請聯繫我們,我們將及時處理

【精選推薦文章】

如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

想要讓你的商品在網路上成為最夯、最多人討論的話題?

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

不管是台北網頁設計公司、台中網頁設計公司,全省皆有專員為您服務

想知道最厲害的台北網頁設計公司推薦、台中網頁設計公司推薦專業設計師"嚨底家"!!

浪潮劉軍談AI:站在岸上是學不會游泳的

浪潮劉軍談AI:站在岸上是學不會游泳的

2019-05-05 14:37    原創  作者: 謝濤 編輯:
0購買

  【IT168 評論】人工智能是當今最受關注的技術領域之一,它已經在醫療、金融、製造、能源、娛樂……等各個行業,為商業形態、生產方式帶來了顯著的改變。而且我們也可以預見,未來AI將持續為整個世界帶來更大的變化。

  實際上,AI並不算新鮮,我們現在所處的是第三次AI革命。從上世紀五十年代,“人工智能”這個概念被首次提出到現在,AI發展歷程上出現了兩次高峰期,但很快又沒落下去。

  那麼為什麼在這一次的革命中,AI能得到如此廣泛的應用與普及呢?除了算法的持續優化,以及越來越多的數據可供分析外,底層計算力的飛速發展,也是一個關鍵因素。

  作為領先的IT基礎設施及服務供應商,浪潮在這場變革中的表現也備受關注。實際上,浪潮早已布局AI計算,並始終致力於打造敏捷、高效、優化的AI基礎設施。如今已成為百度、阿里、騰訊等領先互聯網企業最主要的AI服務器供應商,並與科大訊飛、商湯、曠視、今日頭條、滴滴等領先的AI科技公司保持深入緊密合作。

  在IPF2019期間,筆者有幸採訪到了浪潮AI&HPC總經理劉軍,請他對當下整個AI發展階段分享了自己的見解。

  AI的未來充滿希望,同時也應直面挑戰

  首先,劉軍先生認為,AI是一個非常充滿希望的行業。“棋盤上的AI只是為了帶給大家震憾性的效果,我覺得更重要的是,如今我們可以真正體會到,AI已經更多的出現在我們日常的生活、工作中。一個技術能夠走出原來單純是紙上談兵,或者只是秀技的階段,才具備了它真正強大的生命力。”劉軍表示,“所以我認為,即便僅僅是現在所能夠推動的,像視覺、語音等幾個領域,也足以實現一個天翻地覆的革新。這就是我對它充滿樂觀希望的原因之一。”

  但我們無法否認的是,即便是這樣一個充滿潛力的行業,也必定存在許多問題與挑戰。據劉軍先生分享,目前整個AI行業存在兩大方面的挑戰。一個是AI的產業化,對於很多AI科技企業來說,如何將自己的技術產品化,將產品市場化,是他們面臨的主要困擾。第二個是產業的AI化,對於製造業、能源行業、汽車行業、城市治理……等等相對互聯網而言比較傳統的行業,往往都面臨着如何在自己的產業領域中,實現與AI技術相結合的問題。

浪潮AI&HPC總經理劉軍

  “問題是一直存在的,不過我認為最好的解決方案是,不要在岸上看,而是一起下來游泳,在游泳中學會游泳,這是最重要的。所以我們也希望和客戶、行業合作夥伴一起,在這一波AI的浪潮中,親自下海,親自實踐。”劉軍補充道,“同時我們也將持續提供更好的產品載體,讓大家能夠很快上手,支撐企業更快、更高效地建設自己的AI系統。”

  浪潮:為AI提供更好的載體

  在這場全球性的重要變革中,浪潮提出了智慧計算髮展戰略,聚焦“雲、大數據、人工智能”三個最典型的智慧計算應用場景,在技術、產品、模式和生態方面不斷創新。在AI方面,浪潮通過不斷構建與加強自身在計算平台、管理套件、框架優化、應用加速四個層面上的產品服務能力,獲得了眾多合作夥伴與企業的認可,已成為全球領先的AI基礎設施提供商。

  在AI計算平台方面,浪潮相繼推出了SR-AI整機櫃服務器、超高密度服務器AGX-2、專為智能視頻分析優化的AI服務器NF5280M5-V、專為AI雲場景對彈性配置能力予以優化的GPU服務器NF5468M5、集成HBM2高速緩存的FPGA AI加速卡F37X、以及AI計算性能高達每秒2千萬億次的AI超級服務器AGX-5等極具競爭力的產品。

  浪潮建設了全面的人工智能產品線,覆蓋從單機4卡到64卡集群的不同人工智能計算平台,產品涵蓋GPU/CPU/FPGA等所有計算技術,覆蓋了從小規模的樣本訓練到千億樣本、萬億參數級別的超大規模模型訓練需求,能夠滿足人工智能雲、深度學習模型訓練和線上推理等各類人工智能應用場景,對計算架構性能、功耗的不同需求。

  而在管理套件與框架優化方面,浪潮也推出了AI高效開發管理平台AIStation和OpenStack AI雲平台、Caffe-MPI以及TensorFlow-Opt等框架優化、FPGA計算加速引擎TF2等等。此外,浪潮在IPF2019最新發布了浪潮人工智能 PAAS平台,這是一個面向人工智能企業訓練場景,拉通用戶開發環境、計算資源、數據資源,構建一體化的人工智能開發平台。與此同時,浪潮還重磅發布了可靈活支持本地化或雲端部署的高并行擴展自動機器學習平台AutoML Suite,為AI客戶與開發者提供快速高效開發AI模型的能力。

  當然最重磅的還是IPF2019上發布的“浪潮元腦”,它是以上我們所介紹的浪潮人工智能全棧能力的載體與具象,既包含浪潮全球領先的場景化人工智能基礎設施,多樣化的深度學習框架與工具,以及最新研發的人工智能 PaaS平台和AutoML Suite等“有形”產品,同時也凝聚了浪潮多年積累的人工智能算法優化、系統優化服務等“無形”能力。

  未來可期

  根據IDC公布的數據,2018上半年中國人工智能基礎架構市場繼續保持了強勁增長勢頭,銷售額為5.43億美元,而浪潮在其中佔到了51.4%,超過其他所有市場參与者的總和,以絕對領先的優勢保持市場份額第一。

  在IPF2019大會上,中國工程院院士、浪潮集團執行總裁王恩東表示:“人工智能計算是未來核心動力,代表着智慧計算的發展方向。”並提出,融合、開放與敏捷將是人工智能計算最重要的三大發展趨勢。

  在筆者看來,基於對AI未來發展的清晰認知,浪潮正持續構建更高的產品服務能力,並全力推進“百花齊放”的AI產業生態建設。我們也有理由相信,在AI的這片廣闊天地中,浪潮會更加有所作為。

, ,

本站聲明:網站內容來源http://www.it168.com/,如有侵權,請聯繫我們,我們將及時處理

【精選推薦文章】

如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

想要讓你的商品在網路上成為最夯、最多人討論的話題?

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

不管是台北網頁設計公司、台中網頁設計公司,全省皆有專員為您服務

想知道最厲害的台北網頁設計公司推薦、台中網頁設計公司推薦專業設計師"嚨底家"!!