IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ネクストヴイピーユー(シャンハイ)カンパニー リミテッドの特許一覧

特許6993739予めメモリを割り当てる方法及び装置、電子回路、電子機器並びに記憶媒体
<>
  • 特許-予めメモリを割り当てる方法及び装置、電子回路、電子機器並びに記憶媒体 図1
  • 特許-予めメモリを割り当てる方法及び装置、電子回路、電子機器並びに記憶媒体 図2
  • 特許-予めメモリを割り当てる方法及び装置、電子回路、電子機器並びに記憶媒体 図3
  • 特許-予めメモリを割り当てる方法及び装置、電子回路、電子機器並びに記憶媒体 図4
  • 特許-予めメモリを割り当てる方法及び装置、電子回路、電子機器並びに記憶媒体 図5
  • 特許-予めメモリを割り当てる方法及び装置、電子回路、電子機器並びに記憶媒体 図6
  • 特許-予めメモリを割り当てる方法及び装置、電子回路、電子機器並びに記憶媒体 図7
  • 特許-予めメモリを割り当てる方法及び装置、電子回路、電子機器並びに記憶媒体 図8A
  • 特許-予めメモリを割り当てる方法及び装置、電子回路、電子機器並びに記憶媒体 図8B
  • 特許-予めメモリを割り当てる方法及び装置、電子回路、電子機器並びに記憶媒体 図9
  • 特許-予めメモリを割り当てる方法及び装置、電子回路、電子機器並びに記憶媒体 図10
  • 特許-予めメモリを割り当てる方法及び装置、電子回路、電子機器並びに記憶媒体 図11
  • 特許-予めメモリを割り当てる方法及び装置、電子回路、電子機器並びに記憶媒体 図12
  • 特許-予めメモリを割り当てる方法及び装置、電子回路、電子機器並びに記憶媒体 図13
  • 特許-予めメモリを割り当てる方法及び装置、電子回路、電子機器並びに記憶媒体 図14
  • 特許-予めメモリを割り当てる方法及び装置、電子回路、電子機器並びに記憶媒体 図15
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2021-12-14
(45)【発行日】2022-01-14
(54)【発明の名称】予めメモリを割り当てる方法及び装置、電子回路、電子機器並びに記憶媒体
(51)【国際特許分類】
   G06N 3/10 20060101AFI20220106BHJP
   G06F 12/02 20060101ALI20220106BHJP
【FI】
G06N3/10
G06F12/02 510A
【請求項の数】 19
【外国語出願】
(21)【出願番号】P 2020186872
(22)【出願日】2020-11-10
(65)【公開番号】P2021077378
(43)【公開日】2021-05-20
【審査請求日】2020-11-19
(31)【優先権主張番号】201911092427.8
(32)【優先日】2019-11-11
(33)【優先権主張国・地域又は機関】CN
(73)【特許権者】
【識別番号】519155675
【氏名又は名称】ネクストヴイピーユー(シャンハイ)カンパニー リミテッド
【氏名又は名称原語表記】NEXTVPU(SHANGHAI)CO.,LTD.
【住所又は居所原語表記】RM501, BLDG 7, #3000 LONGDONG RD, PUDONG NEW DISTRICT, SHANGHAI 201203, P.R. CHINA
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【弁理士】
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】ジュイン パーン
(72)【発明者】
【氏名】ハイジャオ ツァイ
(72)【発明者】
【氏名】シンポン フォン
(72)【発明者】
【氏名】ジィ ジョウ
【審査官】金木 陽一
(56)【参考文献】
【文献】中国特許出願公開第108829610(CN,A)
【文献】特開2019-133666(JP,A)
【文献】WANG, L., et al.,SuperNeurons: Dynamic GPU Memory Management for Training Deep Neural Networks,arXiv.org [online],2018年01月13日,[retrieved on 2021-11-25] Retrieved from the Internet: <URL: https://arxiv.org/abs/1801.04380>
(58)【調査した分野】(Int.Cl.,DB名)
G06N 3/10
G06F 12/02
(57)【特許請求の範囲】
【請求項1】
ニューラルネットワークのフォワード計算のために予めメモリを割り当てる方法であて、
ニューラルネットワークの第一層から、順に配列されるニューラルネットワークの各層について、以下の計算ステップを実行することを含み、即ち、
現在の層の各出力について、アイドルメモリブロック識別子を記録するためのアイドルメモリブロック識別子表からメモリブロック識別子を取得する試みを行い;
取得した場合、該出力の識別子と、取得したメモリブロック識別子とを1対のマッピング関係として、出力とメモリブロック識別子とのマッピング表に格納し、そして、アイドルメモリブロック識別子表から該メモリブロック識別子を削除し、ここで、出力とメモリブロック識別子との前記マッピング表は、該層の各出力の識別子と、対応するメモリブロック識別子とを記録するために用いられ;
取得することができない場合、1つのメモリブロック識別子を新しく生成し、該出力の識別子と、新しく生成した該メモリブロック識別子とを1対のマッピング関係として、出力とメモリブロック識別子との前記マッピング表に格納し、また、新しく生成した該メモリブロック識別子を、新しく生成したすべてのメモリブロック識別子を記録するためのメモリブロック識別子総表に格納し、これにより、ニューラルネットワークのフォワード計算を行うときに、該メモリブロック識別子総表に基づいて、ニューラルネットワークのフォワード計算に必要なメモリブロックを生成し;及び
現在の層の各入力について、該入力としての前の層の出力が該現在の層の後続層の入力とされない場合、該入力としての前の層の出力に対応するメモリブロック識別子をアイドルメモリブロック識別子表に格納する、方法。
【請求項2】
請求項1に記載の方法であって、
各メモリブロック識別子が1つのメモリブロック容量に対応し、
アイドルメモリブロック識別子表から取得したメモリブロック識別子に対応するメモリブロック容量が該出力に必要な容量よりも小さい場合、該メモリブロック識別子に対応するメモリブロック容量を拡張する、方法。
【請求項3】
請求項2に記載の方法であって、
前記の、アイドルメモリブロック識別子を記録するためのアイドルメモリブロック識別子表からメモリブロック識別子を取得することは、
アイドルメモリブロック識別子表に複数のアイドルメモリブロック識別子があり、且つ前記複数のアイドルメモリブロック識別子に対応するメモリブロック容量がすべて該出力に必要な容量よりも小さい場合、前記複数のアイドルメモリブロック識別子のうちから、対応するメモリブロック容量が最大であるアイドルメモリブロック識別子を、該出力とマッピング関係を有するメモリブロック識別子として選択することを含み、
前記の、アイドルメモリブロック識別子表から取得したメモリブロック識別子に対応するメモリブロック容量が該出力に必要な容量より小さい場合、該メモリブロック識別子に対応するメモリブロック容量を拡張することは、
前記複数のアイドルメモリブロック識別子のうちから選択された、対応するメモリブロック容量が最大であるアイドルメモリブロック識別子について、該メモリブロック識別子に対応するメモリブロック容量を、少なくとも該出力に必要な容量に等しく拡張することを含む、方法。
【請求項4】
請求項2に記載の方法であって、
前記の、アイドルメモリブロック識別子表から取得したメモリブロック識別子に対応するメモリブロック容量が該出力に必要な容量よりも小さい場合、該メモリブロック識別子に対応するメモリブロック容量を拡張することは、
該出力に必要な容量に基づいて、該メモリブロック識別子に対応するメモリブロック容量を拡張することにより、該メモリブロック容量が少なくとも該出力に必要な容量に等しくなるようにさせることを含む、方法。
【請求項5】
請求項1に記載の方法であって、
各メモリブロック識別子が1つのメモリブロック容量に対応し、
前記の、アイドルメモリブロック識別子を記録するためのアイドルメモリブロック識別子表からメモリブロック識別子を取得することは、
アイドルメモリブロック識別子表に複数のアイドルメモリブロック識別子がある場合、前記複数のアイドルメモリブロック識別子の各自の対応するメモリブロック容量と、該出力に必要な容量との比較を行い、該出力に必要な容量以上のメモリブロック容量のうちの、該出力に必要な容量との差が最小であるメモリブロック容量に対応するアイドルメモリブロック識別子を、該出力とマッピング関係を有するメモリブロック識別子として選択することを含む、方法。
【請求項6】
請求項2~5のうちの何れか1項に記載の方法であって、
該出力に必要な容量は該出力のデータ量及びデータ類型に基づいて確定される、方法。
【請求項7】
請求項1~5のうちの何れか1項に記載の方法であって、
前記計算ステップの前に、それぞれ、ニューラルネットワークの各層のために該層の入力集合及び出力集合を構築することをさらに含み、
各層の前記入力集合における各要素は、該層の各入力の識別子、データ量、及び該入力を記憶するためのメモリブロックアドレスに指向するメモリブロックポインターを含み、各層の前記出力集合における各要素は、該層の各出力の識別子、データ量、及び該出力を記憶するためのメモリブロックアドレスに指向するメモリブロックポインターを含む、方法。
【請求項8】
請求項1~5のうちの何れか1項に記載の方法であって、
前記計算ステップを実行する前に、ニューラルネットワークにおける各出力が該出力の後続層の入力とされる回数を、該出力の引用回数として統計し、そして、各出力と、該出力の引用回数とのマッピング関係を記憶するための出力と引用回数との対応表を生成することをさらに含む、方法。
【請求項9】
請求項8に記載の方法であって、
前記の、統計ニューラルネットワークにおける各出力が該出力の後続層の入力とされる回数を、該出力の引用回数として統計し、そして、各出力と、該出力の引用回数とのマッピング関係を記憶するための出力と引用回数との対応表を生成することは、
ニューラルネットワークの各層について、
現在の層の各入力を取得し、出力と引用回数との前記対応表に、該入力としての前の層の出力と、該出力の引用回数とのマッピング関係があるかを判断し、「ある」場合、該前の層の出力の引用回数に単位数量をプラスし;及び
現在の層の各出力を取得し、出力と引用回数との前記対応表において1対のマッピング関係として該出力と該出力の引用回数とを新しく生成し、ここで、該出力とマッピング関係を有する引用回数を第一所定値に初期化することを含む、方法。
【請求項10】
請求項9に記載の方法であって、
各層について、前記計算ステップを実行することは、
現在の層の入力としての前の層の出力の引用回数から前記単位数量をマイナスすることにより、出力と引用回数との前記対応表を更新することをさらに含む、方法。
【請求項11】
請求項10に記載の方法であって、
前記の、該入力としての前の層の出力が該現在の層の後続層の入力とされない場合、該入力としての前の層の出力に対応するメモリブロック識別子をアイドルメモリブロック識別子表に格納することは、
前記前の層の出力の引用回数が前記単位数量をマイナスした後に第二所定値になる場合、該前の層の出力に対応するメモリブロック識別子を前記アイドルメモリブロック識別子表に格納することを含む、方法。
【請求項12】
請求項2~4のうちの何れか1項に記載の方法であって、
取得又は生成したメモリブロック識別子と、対応するメモリブロック容量とを、1対のマッピング関係として、現在の層に使用する、メモリブロック識別子と、対応するメモリブロック容量とを記憶するための使用済みメモリブロック識別子と容量とのマッピング表に記憶し、また、メモリブロック容量の前記拡張に応じて、使用済みメモリブロック識別子と容量との前記マッピング表において対応するメモリブロック識別子のメモリブロック容量を更新する、方法。
【請求項13】
請求項1~5のうちの何れか1項に記載の方法であって、
出力とメモリブロック識別子との前記マッピング表には、前記ニューラルネットワークのすべての出力の識別子と、対応するメモリブロック識別子とのマッピング関係が記憶される、方法。
【請求項14】
請求項1に記載の方法であって、
以下のメモリ割り当てステップをさらに含み、即ち、
前記メモリブロック識別子総表における各メモリブロック識別子のために1つのメモリブロックポインターを生成し;及び
出力とメモリブロック識別子との前記マッピング表に記録されるマッピング関係に基づいて、各層の出力を、マッピング関係を有するメモリブロック識別子のメモリブロックポインターと関連付けさせる、方法。
【請求項15】
ニューラルネットワークのフォワード計算のために予めメモリを割り当てる装置であって、
ニューラルネットワークの第一層から、順に配列されるニューラルネットワークの各層について、以下の操作を行うように構成される計算ユニットを含み、即ち、
ニューラルネットワークの第一層から、順に配列されるニューラルネットワークの各層について、以下の計算ステップを行い、即ち、
現在の層の各出力について、アイドルメモリブロック識別子を記録するためのアイドルメモリブロック識別子表からメモリブロック識別子を取得する試みを行い;
取得した場合、該出力の識別子と、取得したメモリブロック識別子とを1対のマッピング関係として、出力とメモリブロック識別子とのマッピング表に格納し、そして、アイドルメモリブロック識別子表から該メモリブロック識別子を削除し、ここで、出力とメモリブロック識別子との前記マッピング表は、該層の各出力の識別子と、対応するメモリブロック識別子とを記録するために用いられ;
取得することができない場合、1つのメモリブロック識別子を新しく生成し、該出力の識別子と、新しく生成した該メモリブロック識別子とを1対のマッピング関係として、出力とメモリブロック識別子との前記マッピング表に格納し、また、新しく生成した該メモリブロック識別子を、新しく生成したすべてのメモリブロック識別子を記録するためのメモリブロック識別子総表に格納し、これにより、ニューラルネットワークのフォワード計算を行うときに、該メモリブロック識別子総表に基づいて、ニューラルネットワークのフォワード計算に必要なメモリブロックを生成し;及び
現在の層の各入力について、該入力としての前の層の出力が該現在の層の後続層の入力とされない場合、該入力としての前の層の出力に対応するメモリブロック識別子をアイドルメモリブロック識別子表に格納する、装置。
【請求項16】
請求項15に記載の装置であって、
事前割り当てユニットをさらに含み、
前記事前割り当てユニットは、
前記メモリブロック識別子総表における各メモリブロック識別子のために1つのメモリブロックポインターを生成し;及び
出力とメモリブロック識別子との前記マッピング表に記録されるマッピング関係に基づいて、各層の出力を、マッピング関係を有するメモリブロック識別子のメモリブロックポインターと関連付けさせるように構成される、装置。
【請求項17】
電子回路であって、
請求項1~14のうちの何れか1項に記載の方法におけるステップを実行するように構成される回路を含む、電子回路。
【請求項18】
電子機器であって、
処理器;及び
プログラムを記憶している記憶器を含み、
前記プログラムは指令を含み、前記指令は、前記処理器により実行されるときに、前記処理器に、請求項1~14のうちの何れか1項に記載の方法を実行させる、電子機器。
【請求項19】
プログラムを記憶している非一時的なコンピュータ可読記憶媒体であって、
前記プログラムは指令を含み、前記指令は、電子機器の処理器により実行されるときに、前記電子機器に、請求項1~14のうちの何れか1項に記載の方法を実行させる、非一時的なコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、メモリ管理分野に関し、特に、ニューラルネットワークのフォワード(forward)計算のために予めメモリを割り当てる方法及び装置、電子回路、電子機器並びにコンピュータ可読記憶媒体に関する。
【背景技術】
【0002】
近年、ニューラルネットワーク技術が様々な分野で幅広く応用されている。しかし、メモリリソースが非常に限られている装置について言えば、ニューラルネットワークの利用に供し得るメモリが少ないため、このような装置上のニューラルネットワークの応用及びそのパフォーマンスは大きく制限されている。
【0003】
なお、この部分に述べた方法は、必ずしも本願の出願前に考案又は採用された方法でない。特に明記されない限り、この部分に述べたいずれの方法は、この部分に含まれている理由だけで従来技術と見なされるべきでない。同様に、特に明記されない限り、この部分に言及された問題も、従来技術で認識されたものと見なされるべきでない。
【発明の概要】
【発明が解決しようとする課題】
【0004】
本開示の目的は、ニューラルネットワークのフォワード計算のために予めメモリを割り当てる方法及び装置、電子回路、電子機器並びにコンピュータ可読記憶媒体を提供することにある。
【課題を解決するための手段】
【0005】
本開示の一側面によれば、ニューラルネットワークのフォワード計算のために予めメモリを割り当てる方法が提供され、該方法は、ニューラルネットワークの第一層から、順に配列されるニューラルネットワークの各層について、以下の計算ステップを行い、即ち、
現在の層の各出力について、アイドルメモリブロック識別子を記録するためのアイドルメモリブロック識別子表からメモリブロック識別子を取得する試みを行い、取得した場合、該出力の識別子と、取得したメモリブロック識別子とを1対のマッピング関係として、出力とメモリブロック識別子とのマッピング表に格納し、そして、アイドルメモリブロック識別子表から該メモリブロック識別子を削除し、そのうち、出力とメモリブロック識別子との前記マッピング表は、該層の各出力の識別子と、対応するメモリブロック識別子とを記録するために用いられ、取得することができない場合、1つのメモリブロック識別子を新しく生成し、該出力の識別子と、新しく生成した該メモリブロック識別子とを1対のマッピング関係として、出力とメモリブロック識別子との前記マッピング表に格納し、また、新しく生成した該メモリブロック識別子を、新しく生成したすべてのメモリブロック識別子を記録するためのメモリブロック識別子総表に格納し、これにより、ニューラルネットワークのフォワード計算を行うときに、該メモリブロック識別子総表に基づいて、ニューラルネットワークのフォワード計算に必要なメモリブロックを生成し;及び
現在の層の各入力について、該入力としての前の層の出力が該現在の層の後続層の入力とされない場合、該入力としての前の層の出力に対応するメモリブロック識別子をアイドルメモリブロック識別子表に格納する。
【0006】
本開示の他の側面によれば、ニューラルネットワークのフォワード計算のために予めメモリを割り当てる装置が提供され、該装置は、以下の操作を行うように構成される計算ユニットを含み、即ち、
現在の層の各出力について、アイドルメモリブロック識別子を記録するためのアイドルメモリブロック識別子表からメモリブロック識別子を取得する試みを行い、取得した場合、該出力の識別子と、取得したメモリブロック識別子とを1対のマッピング関係として、出力とメモリブロック識別子とのマッピング表に格納し、そして、アイドルメモリブロック識別子表から該メモリブロック識別子を削除し、そのうち、出力とメモリブロック識別子との前記マッピング表は、該層の各出力の識別子と、対応するメモリブロック識別子とを記録するために用いられ、取得することができない場合、1つのメモリブロック識別子を新しく生成し、該出力の識別子と、新しく生成した該メモリブロック識別子とを1対のマッピング関係として、出力とメモリブロック識別子との前記マッピング表に格納し、また、新しく生成した該メモリブロック識別子を、新しく生成したすべてのメモリブロック識別子を記録するためのメモリブロック識別子総表に格納し、これにより、ニューラルネットワークのフォワード計算を行うときに、該メモリブロック識別子総表に基づいて、ニューラルネットワークのフォワード計算に必要なメモリブロックを生成し;及び
現在の層の各入力について、該入力としての前の層の出力が該現在の層の後続層の入力とされない場合、該入力としての前の層の出力に対応するメモリブロック識別子をアイドルメモリブロック識別子表に格納する。
【0007】
本開示の他の側面によれば、電子回路が提供され、それは、上述の方法におけるステップを実行するように構成される回路を含む。
【0008】
本開示の他の側面によれば、電子機器がさらに提供され、それは、処理器、及びプログラムを記憶している記憶器を含み、前記プログラムは指令を含み、前記指令は、前記処理器により実行されるときに、前記処理器に上述の方法を実行させる。
【0009】
本開示の他の側面によれば、プログラムを記憶している非一時的なコンピュータ可読記憶媒体がさらに提供され、前記プログラムは指令を含み、前記指令は、電子機器の処理器により実行されるときに、前記電子機器に上述の方法を実行させる。
【図面の簡単な説明】
【0010】
添付した図面は実施例を例示的に示し、且つ明細書の一部を構成するものであり、明細書の文字説明とともに実施例の例示的な実施方式を説明するために用いられる。なお、示されている実施例は例示に過ぎず、本開示の技術的範囲を限定しない。また、すべての図面では、同一の符号は、類似しているが、必ずしも同じでない要素を示す。
図1】本開示の1つの例示的な実施例においてニューラルネットワークのフォワード計算のために予めメモリを割り当てる方法のフローチャートである。
図2】1つのニューラルネットワークの構成例を示す図である。
図3】1つの出力が複数回引用される例を示す図である。
図4】1つの例示的なアイドルメモリブロック識別子表801を示す図である。
図5】出力とメモリブロック識別子との1つの例示的なマッピング表802を示す図である。
図6】1つの例示的なメモリブロック識別子総表803を示す図である。
図7】本開示の例示的な実施例において計算ステップS100の前に実行するステップのフローチャートである。
図8A】例示的な入力集合804を示す図である。
図8B】例示的な出力集合805を示す図である。
図9】出力と引用回数との1つの例示的な対応表806を示す図である。
図10】本開示の例示的な実施例において出力と引用回数との前記対応表806を生成する方法のフローチャートである。
図11】本開示の例示的な実施例において出力と引用回数との前記対応表806を更新する方法のフローチャートである。
図12】使用済みメモリブロック識別子と容量との1つの例示的なマッピング表807を示す図である。
図13】本開示の例示的な実施例におけるメモリ割り当てステップS200のフローチャートである。
図14】本開示の例示的な実施例において予めメモリを割り当てる装置1を示すブロック図である。
図15】本開示の例示的な実施例における電子機器の構成を示すブロック図である。
【発明を実施するための形態】
【0011】
本開示では、特に明記されない限り、“第一”、“第二”などの用語を用いて各種の要素を説明するが、これらの要素の位置関係、時間順序関係又は重要性関係を限定しない。このような用語は、1つの素子と、もう1つの素子とを区別するためにのみ用いられる。幾つかの例では、第一要素及び第二要素は該要素の同一の実例を指すことができるが、幾つかの場合では、それらは、コンテキストに基づいて、異なる実例を指すこともできる。
【0012】
本開示では、各種の例についての説明に使用される用語は特定の例を説明するためだけのものであり、限定するために用いられるものでない。コンテキストに特に明記されない限り、要素の数を限定しない場合、該要素は1つ又は複数あっても良い。また、本開示に使用される用語“及び/又は”は、挙げられる項目のうちの任意の1つ及びすべての可能な組み合わせを含む。
【0013】
ニューラルネットワークの計算には大量のメモリ消費が必要である。例えば、深層ニューラルネットワークには、しばしば、多くの層の畳み込み演算があり、入力から、幾つかの層、数十の層、ひいては数百の層の畳み込み演算を経る必要がある。従来技術では、ニューラルネットワークにおける各層の出力についてメモリが割り当てられ、これは、非常に大きいメモリの容量を要し、メモリの容量が非常に限られている装置にとって大きな挑戦である。
【0014】
メモリの容量が小さい装置についてメモリを節約しようとする場合、各層の計算終了時にメモリをリリースし、且つ次の層の計算開始時に、リアルタイムなニーズに応じてメモリを申し込む(リクエストする)ことができ、これにより、リアルタイムにメモリを割り当てることでメモリの利用率を向上させることができる。しかし、このように各層においてすべて臨時にメモリを申し込む及び割り当てる場合、特に、ニューラルネットワークの畳み込み層が多い場合、時間がかかり、ニューラルネットワーク全体のパフォーマンスに大きく影響する恐れがある。
【0015】
本開示は、ニューラルネットワークのフォワード計算のために予めメモリを割り当てる方法を提供する。図1は、本開示の例示的な実施例においてニューラルネットワークのフォワード計算のために予めメモリを割り当てる方法のフローチャートである。
【0016】
ニューラルネットワークのフォワード計算の過程において、入力層からデータを取得し、その後、順に逐層で計算を行い、逐層計算の過程では、前の層の出力を記憶するメモリから必要なデータを取得し、現在の層の演算を行い、そして、現在の層の出力としての計算結果を、後の層の使用に供するためにメモリに記憶する。
【0017】
図1に示すように、本開示の例示的な実施例においてニューラルネットワークのフォワード計算のために予めメモリを割り当てる方法は、ニューラルネットワークの第一層から、順に配列されるニューラルネットワークの各層について、計算ステップS100を行うことを含む。
【0018】
図2に示すような1つのニューラルネットワーク構造について、データがまず層1に進入して処理され、その後、層1の出力が入力として層2に進入し、続いて、層2の出力が入力として層3に進入し、その後、層3の出力が入力として後続層に進入し、このようにして、該ニューラルネットワークの最後の1つの層に至ることができる。
【0019】
本文では、上述の“層”は、ニューラルネットワークに使用される各種の層、例えば、畳み込み層、プーリング層、活性化層、バッチ正規化層などであっても良い。
【0020】
また、便宜のため、図2に示すのは一種の簡単な入出力の接続関係であり、即ち、前の層の出力が直接次の層の入力とされる。但し、実際には、1つの層の出力が直接その直後の層の入力とされず、その直後の層の後の層の入力とされる場合がある。また、1つの層の或る出力がその後の複数の層の入力とされる場合もある。即ち、1つの出力が幾つかの入力により引用される(本文では、「引用される」とは、「用いられる」や「とされる」を指す。例えば、「入力により引用される」は、「入力に用いられる」や「入力とされる」を意味する。)場合が存在する。なお、1つの出力が或る層の1つの入力とされるときに、“該出力が一回引用される”と称し、1つの出力が、異なる層の入力(このときに複数の入力がある)により引用されるときに、“該出力が複数回引用される”と称する。図3は、1つの出力が複数回引用される例を示している。図3から分かるように、プーリング層1’の1つの出力Out1がそれぞれ、畳み込み層2’の1つの入力In1、畳み込み層3’の1つの入力In2、及び活性化層4’の1つの入力In3とされており、これは、プーリング層の該出力Out1が後続層の入力により3回引用されることを意味する。
【0021】
各出力が後続の入力により引用される回数は、ニューラルネットワークの具体的な構造により決められる。換言すると、ニューラルネットワークの具体的な構造に基づいて、各出力が後続の入力により引用される回数を確定することができる。
【0022】
ニューラルネットワークの各層において1つのみの演算が行われても良く、例えば、各層では、1つの複雑な畳み込み演算を行い、又は、活性化関数の演算を行う。もちろん、本開示はこれについて限定せず、ニューラルネットワークにおける1つの層又は複数の層において複数の演算が行われても良い。図3に示すように、該層における演算の入力及び出力は該層の入力及び出力である。
【0023】
ニューラルネットワークのフォワード計算を行う前に、各層において、該層の演算について前記計算ステップS100を実行しても良く、該計算ステップS100は、メモリ再利用(reuse)の方式により、予め該層の各出力のために、フォワード計算の実行時に該出力のために割り当てるメモリ、及びリリースするメモリ(後続層の継続使用に供することで、メモリ再利用を実現する)を計算する。
【0024】
前記計算ステップS100は以下のようなステップS101~S104を含んでも良い。
【0025】
まず、現在の層の各出力について、ステップS101では、アイドルメモリブロック識別子(ID)を記録するためのアイドルメモリブロック識別子表(Idle List)からメモリブロック識別子(memory ID)を取得する試みを行う。換言すると、図1に示すように、本ステップでは、アイドルメモリブロック識別子表に該出力のためのメモリブロック識別子がまだあるかを判断する。
【0026】
本開示おける計算ステップS100の実行開始前に、アイドルメモリブロック識別子表を空に設定しても良く、これは、このときのアイドルメモリブロック識別子表にメモリブロック識別子がないことを意味する。
【0027】
アイドルメモリブロック識別子表の例示的な形式は図4に示すようであり、該アイドルメモリブロック識別子表801はメモリブロック識別子[MID1,MID2,…,MIDn]、即ち、計n個のアイドルメモリブロック識別子を含む。
【0028】
なお、ニューラルネットワークのフォワード計算を開始しようと確定したときにのみ、メモリを割り当てる必要があり、この前に行われるのはメモリの事前割り当てであり、リアルなメモリ空間に対して実際の操作が行われず、即ち、本開示の例示的な実施例によるメモリ事前割り当て方法は、予めメモリ空間に対して計画を行い、各層のメモリの占用及びリリースを計算するが、実際のメモリの占用及びリリースの操作が生じない。予め割り当てるときに、リアルなメモリ空間がまだ生成されておらず、ニューラルネットワークのフォワード計算を行おうとするときにのみ、メモリブロック識別子に基づいてそれに対応するリアルなメモリブロックを生成する。
【0029】
本文では、アイドルメモリブロック識別子表801はアイドルメモリブロック識別子を格納するために用いられ、即ち、アイドルメモリブロック識別子表801には、将来、ニューラルネットワークのフォワード計算を行うときに、生成された各メモリブロックにおいて、アイドル(使用されない)メモリブロックに対応するメモリブロック識別子が記録されている。換言すると、1つのメモリブロック識別子が1つの入力の識別子又は出力の識別子に対応しなければ、アイドルメモリブロック識別子と見なされても良い。
【0030】
幾つかの実施例によれば、全体のニューラルネットワークのフォワード計算に対するメモリ事前割り当て過程では、同一のアイドルメモリブロック識別子表801を使用しても良く、アイドルメモリブロック識別子表801に記憶されているのは、占用されないメモリブロック識別子である。但し、前述のように、各層において、すべて、アイドルメモリブロック識別子表801を更新することで、アイドルメモリブロック識別子を正確に記録し、効率の良いメモリ再利用を実現することができる。
【0031】
本文では、メモリブロック識別子が、将来、ニューラルネットワークのフォワード計算を行うときのメモリブロックを表すように使用される。このような方式により、フォワード計算の過程においてメモリの割り当て及びリリースについてリアルタイムに計算する必要がなく、また、フォワード計算を行うときに各入力及び各出力に対応するメモリブロックを明確にすることもできる。例えば、“アイドル”メモリブロック識別子は、フォワード計算の実行時における“アイドル”メモリブロックを表しても良く、“使用する”メモリブロック識別子は、フォワード計算の実行時に“占用する”(又は“使用済みの”)メモリブロックを表しても良い。
【0032】
本開示では、各メモリブロック識別子が1つのメモリブロックに対応しても良く、該メモリブロックは一定の容量を有する。
【0033】
幾つかの実施例によれば、図1に示すステップS101においてアイドルメモリブロック識別子表から取得したメモリブロック識別子に対応するメモリブロック容量が該出力に必要な容量よりも小さい場合、該メモリブロック識別子に対応するメモリブロック容量を拡張することで、該メモリブロック容量が該出力の容量の要求を満たすようにさせることができる。
【0034】
幾つかの実施例によれば、図1に示すステップS101でアイドルメモリブロック識別子を記録するためのアイドルメモリブロック識別子表からメモリブロック識別子を取得することは、以下のようなことを含んでも良い。
【0035】
アイドルメモリブロック識別子表に複数のアイドルメモリブロック識別子があり、且つ前記複数のアイドルメモリブロック識別子に対応するメモリブロック容量がすべて該出力に必要な容量より小さい(即ち、アイドルメモリブロック識別子表には、容量が該出力に必要な容量以上であるメモリブロック識別子がない)場合、前記複数のアイドルメモリブロック識別子のうちから、対応するメモリブロック容量が最大であるアイドルメモリブロック識別子を選んで、該出力とマッピング関係を有するメモリブロック識別子とする。
【0036】
なお、前記複数のアイドルメモリブロック識別子のうちから選んだのは容量が最大であるアイドルメモリブロック識別子であるが、それは依然として該出力に必要な容量よりも小さいものである。よって、幾つかの実施例によれば、前述のように、選んだ該メモリブロック識別子に対応するメモリブロック容量を拡張することで、それが少なくとも該出力に必要な容量に等しくなるようにさせても良い。
【0037】
幾つかの実施例によれば、該メモリブロック識別子に対応するメモリブロック容量を拡張することは次のようなことを含んでも良く、即ち、該出力に必要な容量に基づいて、該メモリブロック識別子に対応するメモリブロック容量を拡張することで、それが少なくとも該出力に必要な容量に等しくなるようにさせることである。
【0038】
以上、アイドルメモリブロック識別子表におけるメモリブロック識別子に対応するメモリブロック容量が該出力に必要な容量よりも小さいケース及び採用した措置を説明した。以下、それが該出力に必要な容量以上であるケース及び採用する措置を説明する。
【0039】
幾つかの実施例によれば、図1に示すステップS101でアイドルメモリブロック識別子を記録するためのアイドルメモリブロック識別子表からメモリブロック識別子を取得することはさらに以下のようなことを含んでも良い。
【0040】
アイドルメモリブロック識別子表に複数のアイドルメモリブロック識別子があれば、前記複数のアイドルメモリブロック識別子の各自の対応するメモリブロック容量と、該出力に必要な容量との比較を行い、そして、該出力に必要な容量以上であるメモリブロック容量のうちの、該出力に必要な容量との差が最小であるメモリブロック容量に対応するアイドルメモリブロック識別子を選んで、該出力とマッピング関係を有するメモリブロック識別子とする。
【0041】
換言すると、上述の1つの出力について、アイドルメモリブロック識別子表に、該出力の対応するメモリブロック識別子として選択され得る複数のアイドルメモリブロック識別子があれば、この複数のアイドルメモリブロック識別子のうちから、該出力に必要な容量以上であるメモリブロック識別子を選択し、その後、該出力に必要な容量以上であるメモリブロック識別子のうちから、その容量が該出力に必要な容量に最も近いメモリブロック識別子を選択しても良い。
【0042】
例を挙げて言えば、1つの出力OUT1について、アイドルメモリブロック識別子表801に、選択され得る3つのメモリブロック識別子ID1、ID2、ID3があり、この3つのメモリブロック識別子の容量がそれぞれ1Kバイト、5Kバイト、8Kバイトであり、出力OUT1に必要な容量が4Kバイトであるとし、このときには、メモリブロック識別子ID2及びID3の容量がすべて出力OUT1よりも大きいと確定し、その後、ID2及びID3のうちから、容量が該出力OUT1に必要な容量4Kバイトに最も近いメモリブロック識別子ID2を、該出力OUT1の対応するメモリブロック識別子として選択することができる。
【0043】
幾つかの実施例によれば、該出力に必要な容量は、該出力のデータ量及びデータ類型に基づいて確定することができる。
【0044】
ニューラルネットワークの各層の計算では、該層における各出力のデータ量及びデータ類型を確定することができる。例えば、或る畳み込み層の1つの出力のデータ類型がフロート型(float)であり、1つのフロート型データが4バイトを占め、該出力のデータ量が200*200*5であるとすれば、該出力に必要なメモリ空間(即ち、該出力に必要な容量)は200*200*5*4=800000バイトである。
【0045】
以上、アイドルメモリブロック識別子表に、該出力の使用のために選択され得る少なくとも1つのメモリブロック識別子が存在するケースを説明した。アイドルメモリブロック識別子表に少なくとも1つのメモリブロック識別子が存在しても、1つの出力のために、1つのみの対応するメモリブロック識別子を選択することができる。
【0046】
ステップS101でアイドルメモリブロック識別子表からメモリブロック識別子を得た場合、ステップS102では、該出力の識別子と、得たメモリブロック識別子とを1対のマッピング関係として、該層の各出力と、対応するメモリブロック識別子とを記録するための“出力とメモリブロック識別子とのマッピング表”に格納し、そして、アイドルメモリブロック識別子表から該メモリブロック識別子を削除する。
【0047】
上述の“出力とメモリブロック識別子とのマッピング表”802には、1層の各出力がニューラルネットワークのフォワード計算を行うときに使用するメモリブロック識別子が記録されている。よって、該表には、使用するメモリブロック識別子(MID)を記録すべきである以外に、各出力の識別子(OID)を記録すべきである。これにより、該層の各出力と、対応するメモリブロック識別子との間の一対一の対応関係を(図5に示すように)を確立することができる。本文では、このような一対一の対応関係を“マッピング関係”と称する。ちなみに、本文では、出力の識別子OIDと、対応するメモリブロック識別子MIDとの間のマッピング関係があるのみならず、出力の識別子OIDと、それが引用される回数(引用回数とも言う)との間のマッピング関係もある。このようなマッピング関係により、出力の識別子と、メモリブロック識別子との間、及び、出力の識別子と、その引用回数との間の関連付けが確立され得るため、事前計算時に実際の実行時のメモリの占用状況及びメモリのリリース状況を確定することができる。
【0048】
ステップS101でアイドルメモリブロック識別子表からメモリブロック識別子を得た場合、これは、該層においてアイドルメモリブロックがあり、且つ1つのアイドルメモリブロック識別子を既に得たことを表し、このときには、ステップS102に進み、該出力の識別子と、得たメモリブロック識別子とを1対のマッピング関係として、“出力とメモリブロック識別子とのマッピング表”802に格納することができ、これにより、ニューラルネットワークのフォワード計算の実行時に、該層において、該出力が該メモリブロック識別子に対応するメモリブロックを使用する予定があり、即ち、該出力が該層において、該メモリブロックを占用する(即ち、該メモリブロック識別子を占用する)予定があることを表す。
【0049】
該層において該メモリブロック識別子を占用する予定があれば、該メモリブロック識別子はアイドルでなくなる。この場合、該メモリブロック識別子をアイドルメモリブロック識別子表801から削除することにより、メモリブロック識別子のアイドル状態を即時に反映することができる。
【0050】
ステップS102では、アイドルメモリブロック識別子表にメモリブロック識別子があるケースを説明したが、逆に、アイドルメモリブロック識別子表にメモリブロック識別子がなければ、1つのメモリブロック識別子を新しく生成する必要があり、これにより、将来、ニューラルネットワークのフォワード計算の実行時に、該出力を格納するメモリブロックがあるようになる。
【0051】
よって、ステップS101でアイドルメモリブロック識別子表からメモリブロック識別子を得ることができない場合、これは、アイドルメモリブロック識別子がないことを表し、このときには、ステップS103に進み、1つのメモリブロック識別子を新たに生成し、そして、該出力の識別子と、新しく生成した該メモリブロック識別子とを1対のマッピング関係として、前記の“出力とメモリブロック識別子とのマッピング表”802に保存することができる。
【0052】
上述のように、各層の“出力とメモリブロック識別子とのマッピング表”802には、該層の各出力の識別子と、対応すするメモリブロック識別子との間の一対一の対応関係が記憶されている。該メモリブロック識別子がアイドルメモリブロック識別子表から取得されたものであるか、それとも、新しく生成されたものであるかにも関わらず、各出力の識別子と、対応するメモリブロック識別子との間の一対一の対応関係は、該出力が該層において、該メモリブロック識別子に対応するメモリブロックを占用する予定があることを意味する。これにより、各層の各出力のためのメモリ事前割り当てを実現することができ、即ち、ニューラルネットワークのフォワード計算の実際の実行時に、メモリの割り当てを臨時に申し込み、その後、メモリを如何に割り当てるかについて臨時に計算及びデプロイする必要がない。そのため、ニューラルネットワークのフォワード計算に係る申し込み及びメモリ割り当ての時間を節約し、計算の速度を上げることができる。
【0053】
また、新しく生成した該メモリブロック識別子を、新しく生成したすべてのメモリブロック識別子を記録するためのメモリブロック識別子総表に格納しても良く、これにより、ニューラルネットワークのフォワード計算を行うときに、該メモリブロック識別子総表に基づいて、ニューラルネットワークのフォワード計算に必要なメモリブロックを生成することができる。
【0054】
図6に示すように、前記の“メモリブロック識別子総表”803は、全体のニューラルネットワークのフォワード計算に用いられるメモリブロックのメモリブロック識別子MIDを記録するために用いられ、即ち、新しく生成されたメモリブロック識別子は、新しく生成された後に、すべて、該表に入れる必要があり、これにより、ニューラルネットワークのフォワード計算の過程に使用する各メモリブロックの漏れがないようにさせることができる。
【0055】
ステップS102又はS103の後に、ステップS123で現在の層が次(next)の出力を有するかを判断することができ、有する場合、ステップS101に移行して継続して判断を行い、このような処理を、現在の層の各出力についてステップS101を行うまで行い、そして、ステップS101からステップS102又はS103に移行する。また、現在の層が次の出力を有しないと判断した場合、これは、現在の層のすべての出力についてステップS101の判断を行っていることを意味し、このときには、ステップS104に移行する。
【0056】
ステップS104では、現在の層の各入力について、該入力としての前の層の出力が該現在の層の後続層の入力とされない場合、該入力としての前の層の出力に対応するメモリブロック識別子をアイドルメモリブロック識別子表に格納する。
【0057】
前述のように、1つの出力が後続層の入力とされる場合、これは、該出力が後続層の入力により引用されることを表す。本ステップでは、現在の層の各入力に対応する前の層の出力が現在の層の後の他の層の入力により引用されるかを判断し、即ち、現在の層の入力としての前の層の出力が引用される回数(出力の引用回数とも言う)が1に等しいか(現在の層の入力のみにより引用されるか)を判断し、現在の層の入力としての前の層の出力が現在の層の後の他の層の入力により引用されず、即ち、現在の層の入力としての前の層の出力の引用回数が1に等しい場合、これは、現在の層の1つの入力としての該出力が占用するメモリブロック識別子がアイドル状態になる予定があり、それをアイドルメモリブロック識別子表に入れても良いことを表す。
【0058】
本ステップから、アイドルメモリブロック識別子表に保存しようとするメモリブロック識別子を如何に確定するかが分かる。ステップS101でアイドルメモリブロック識別子表から取得しようとするメモリブロック識別子は、この方式により、アイドルメモリブロック識別子表に格納されるものである。
【0059】
ステップS104により、各層のアイドルメモリブロック識別子表におけるメモリブロック識別子を更新することができ、より具体的に言えば、該層の新しくアイドル状態になるメモリブロック識別子を確定することができる。これにより、各層のメモリブロック識別子のアイドル状態を確定することができる。各層のメモリブロック識別子のアイドル状態により、ニューラルネットワークのフォワード計算の実行時にメモリの再利用を行うことができる(ステップS101及びS102において、アイドルメモリブロック識別子があると判断すれば、直接、該アイドルメモリブロック識別子を使用することで、ニューラルネットワークのフォワード計算の実際の実行時のメモリの再利用を実現することができる)。これにより、メモリの使用量を大幅に節約し、メモリの利用率を向上させることができる。
【0060】
本開示では、ニューラルネットワークのフォワード計算のためにメモリの再利用の方式を採用することにより、メモリを事前に割り当て、全体のニューラルネットワークのフォワード計算の過程に使用するメモリ量を減少させることができる。また、事前にメモリを割り当てているので、ニューラルネットワークのフォワード計算の開始の前に、予め全体のニューラルネットワークのフォワード計算に使用しようするメモリを生成することができる。これにより、ニューラルネットワークのフォワード計算の過程において常にメモリの割り当て及びリリースについて計算する必要がなくなるため、ニューラルネットワークのフォワード計算の時間を大幅に節約し、フォワード計算の効率を向上させることができる。
【0061】
本開示では、ニューラルネットワークのフォワード計算の開始の前に、各層に使用しようとするメモリに対して事前割り当てを行うことにより、ニューラルネットワークのフォワード計算の過程における臨時的な申し込み及びメモリ割り当てを行う必要がなくなり、そのため、計算処理の時間を大幅に短縮し、ニューラルネットワークのフォワード計算の過程を加速し、全体のニューラルネットワークのパフォーマンスを有効に向上させることができる。また、メモリを事前割り当てるときに、メモリの再利用によりメモリの使用量を減少させることで、埋め込み型装置における非常に有限なメモリリソースの最大限の利用及び節約を実現することができる。
【0062】
幾つかの実施例によれば、図7に示すように、本開示の例示的な実施例においてニューラルネットワークのフォワード計算のために予めメモリを割り当てる方法はさらに以下のことを含んでも良い。
【0063】
前記計算ステップS100の前に、ステップS110を実行することで、それぞれ、ニューラルネットワークの各層のために該層の入力集合及び出力集合を構築する。
【0064】
図8Aに示すように、ニューラルネットワークの各層のために構築される前記入力集合804における各要素は、該層の各入力の識別子IID、データ量Data-In、及び該入力を記憶するためのメモリブロックのアドレスに指向するメモリブロックポインターIn-Pointerを含む。図8Aに例示する該入力集合はk個の要素があり、そのうち、kは1以上である。
【0065】
同様に、図8Bに示すように、ニューラルネットワークの各層のために構築される前記出力集合805の各要素は、該層の各出力の識別子OID、データ量Data-Out、及び該出力を記憶するためのメモリブロックのアドレスに指向するメモリブロックポインターOut-Pointerを含む。図8Bに例示する該出力集合はm個の要素があり、そのうち、mは1以上である。
【0066】
このように各層のためにその対応する入力集合804を構築し、1つの層の入力に関する入力識別子、データ量及びメモリブロックポインター(メモリブロックポインターは、ニューラルネットワークのフォワード計算の実行の前に空である)を共同で1つの入力集合に入れることにより、これらのデータの集中管理及び柔軟利用を行うことができる。同様に、このように各層のためにその対応する出力集合805を構築し、1つの層の出力に関する出力識別子、データ量及びメモリブロックポインター(メモリブロックポインターは、ニューラルネットワークのフォワード計算の実行の前に空である)共同で1つの出力集合に入れることで、同様にこれらのデータの集中管理及び柔軟利用を行うことができる。これにより、メモリ事前割り当ての計算過程を簡略化することができる。以下、1つの具体的な例を挙げて詳しく説明することにより、本開示の内容をより分かりやすく理解することができる。
【0067】
幾つかの実施例によれば、図7に示すように、本開示の例示的な実施例においてニューラルネットワークのフォワード計算のために予めメモリを割り当てる方法はさらに以下のことを含んでも良い。
【0068】
前記計算ステップS100の前に、ステップS120を実行することで、ニューラルネットワークにおける各出力が該出力の後続層の入力とされる回数を統計して、該出力の引用回数とし、そして、各出力と、該出力の引用回数とのマッピング関係を記録するための、出力と引用回数との対応表を(図9に示すように)生成する。
【0069】
幾つかの実施例によれば、出力と引用回数との対応表806に記録(逐層更新)されている1つの出力の引用回数に基づいて、該出力に対応するメモリブロック識別子がアイドルメモリブロック識別子になる予定があるかを判断することができる。
【0070】
幾つかの実施例によれば、図10に示すように、ステップS120においてニューラルネットワークにおける各出力が該出力の後続層の入力とされる回数を統計して、該出力の引用回数とし、そして、各出力と、該出力の引用回数とのマッピング関係を記憶するための、出力と引用回数との対応表を生成することは、以下のようなことを含む。
【0071】
ニューラルネットワークの各層について、
ステップS1201において、現在の層の各入力を取得し、そして、出力と引用回数との前記対応表806に、該入力としての前の層の出力と、該出力の引用回数とのマッピング関係があるかを確定し、ある(該層において該入力としての前の層の該出力が現在の層の前に既に引用されている)場合、該前の層の出力の引用回数に単位数量をプラスし;ない場合、該入力がその対応する前の層の出力を有しないことを意味し、即ち、該入力が前の層の出力からのものでなく、このときには、出力及び出力の回数の関連操作が行われず;及び
ステップS1202において、現在の層の各出力を取得し、そして、出力と引用回数との前記対応表806において、1対のマッピング関係として該出力と該出力の引用回数とを新しく生成し、そのうち、該出力とマッピング関係を有する引用回数を第一所定値に初期化する。
【0072】
ここで、前記単位数量は1であっても良く、前記第一所定値は0であっても良い。
【0073】
例えば、現在の層の出力として、該層において何れの入力によりも引用されていない場合、その引用回数は0に初期化することができる。該出力が後続層において1つの入力により引用される場合、その引用回数は該後続層のときに1がプラスされ、即ち、1になる。
【0074】
このような場合、或る層の入力として、出力と引用回数との対応表806に、該入力としての前の層の出力と、該出力の引用回数とのマッピング関係がある場合、これは、該入力が該出力からのものであることを表し、このときには、該出力の引用回数に1をプラスすることで、該層の該入力の該出力に対する引用を表す。ない場合、該入力が該出力からのものでないことを意味し、このときには、出力及び出力のる回数の関連操作が行われない。
【0075】
幾つかの実施例によれば、図11に示すように、ニューラルネットワークの各層について、前記計算ステップS100を実行することはさらに以下のようなステップを含んでも良い。
【0076】
ステップS1041:現在の層の入力としての前の層の出力の引用回数から前記単位数量をマイナスすることにより、出力と引用回数との前記対応表を更新し;及び
ステップS1042:更新された、出力と引用回数との前記対応表における各出力の引用回数に基づいて、該出力に対応するメモリブロック識別子をアイドルメモリブロック識別子表に入れるかを判断し、これにより、ニューラルネットワークのフォワード計算の実際の実行時のメモリ再利用を達成することができる。
【0077】
前述のように、前記単位数量は1であっても良く、即ち、1つの出力が1つの入力により引用される度に、該出力の引用回数に1をプラスする。逆に、メモリ割り当ての逐層計算の過程において、1つの層の計算を実行する度に、該層の入力が前の層(必ずしも直前の層でない)の出力を引用する可能性があるので、該層に至るときに、該入力としての前記前の層の該出力の引用回数は1をマイナスすべきである。
【0078】
幾つかの実施例によれば、ステップS104において、該入力としての前の層の出力が該現在の層の後続層の入力とされない(即ち、該出力の引用回数がこのときには1であり、該出力が依然として該入力により引用されるため、1である)場合、該入力としての前の層の出力に対応するメモリブロック識別子をアイドルメモリブロック識別子表に格納することは、以下のようなことを含む。
【0079】
前記前の層の出力の引用回数が前記単位数量をマイナスした後に第二所定値になる場合、該前の層の出力に対応するメモリブロック識別子を前記アイドルメモリブロック識別子表に入れる。
【0080】
該操作はステップS1042の具体的な操作と見なすことができる。例えば、前記前の層の出力の引用回数が1(前記単位数量としての1つの例)をマイナスした後に0(前記第二所定値としての1つの例)になる場合、これは、該出力に対応するメモリブロック識別子がアイドルメモリブロック識別子になれることを表し、このときには、該出力に対応するメモリブロック識別子を前記アイドルメモリブロック識別子表に入れる。
【0081】
これにより、予め、ニューラルネットワークの各層の入力及び出力の状況に基づいて、各層の各出力に対応するメモリブロック識別子を計算し(ニューラルネットワークのフォワード計算の実行時に、1つのメモリブロック識別子が1つのリアルなメモリブロックに対応する)、これにより、ニューラルネットワークのフォワード計算の実行時には、各層でリアルタイムにメモリを申し込み、リアルタイムにメモリの割り当てについて計算し、リアルタイムにメモリを割り当て、リアルタイムにメモリのリリースについて計算し、及びリアルタイムにメモリをリリースする時間を大幅に短縮し、処理速度を上げることができ、また、アイドルメモリブロック識別子表に記録のメモリブロック識別子を更新することにより、メモリの再利用を実現し、装置における貴重なメモリリソースを効率良く利用することもできる。
【0082】
幾つかの実施例によれば、取得又は生成したメモリブロック識別子と、対応するメモリブロック容量とは、1対のマッピング関係として、現在の層に使用する、メモリブロック識別子と、対応するメモリブロック容量とを記録するための使用済みメモリブロック識別子と容量とのマッピング表に記憶され、また、メモリブロック容量の前記拡張に応じて、使用済みメモリブロック識別子と容量との前記マッピング表において対応するメモリブロック識別子のメモリブロックの容量を更新する。
【0083】
そのうち、使用済みメモリブロック識別子と容量との前記マッピング表807は、メモリブロック記述子と称されても良く、メモリブロック識別子、メモリブロック容量などを記録するために用いられ、これにより、メモリブロック識別子と、その対応するメモリブロック容量との間の関連付けを図12に示すように形成する。前述のメモリブロック識別子に対応するメモリ容量は、該表から取得することができる。また、該表807にはさらに、該メモリブロック識別子に対応するメモリブロックに記憶のデータの類型(図12に示す“データ類型”フィールド)が含まれても良い。
【0084】
上述のメモリブロック容量の拡張の場合、使用済みメモリブロック識別子と容量との前記マッピング表807において対応するメモリブロック識別子のメモリブロックの容量を更新しても良く、これにより、予め計画した、メモリブロック識別子に対応するメモリブロックの容量が十分なデータの記憶の要求を満たすようにさせることができる。
【0085】
幾つかの実施例によれば、出力とメモリブロック識別子との前記マッピング表802には、前記ニューラルネットワークのすべての出力の識別子と、対応するメモリブロック識別子との間のマッピング関係が記憶される。
【0086】
出力とメモリブロック識別子との前記マッピング表802に、前記ニューラルネットワークのすべての出力の識別子と、対応するメモリブロック識別子との間のマッピング関係を記憶することで、各層の出力が占用するメモリブロックを記録し、これにより、ニューラルネットワークのフォワード計算の実行時に、直接、各出力に、予め計算したメモリブロック識別子に対応するメモリブロックを割り当てることができる。ここで、各層は、1つの出力とメモリブロック識別子とのマッピング表802を有しても良く、また、該表802は、ニューラルネットワーク全体のすべての層に対する1つの総表であっても良い。
【0087】
幾つかの実施例によれば、本開示においてニューラルネットワークのフォワード計算のために予めメモリを割り当てる方法はさらに、計算ステップS100の後に、メモリ割り当てステップS200を含んでも良い。
【0088】
図13に示すように、前記メモリ割り当てステップS200は以下のようなステップS201及びS202を含んでも良い。
【0089】
ステップS201では、前記メモリブロック識別子総表における各メモリブロック識別子のために1つのメモリブロックポインターを生成する。
【0090】
前述のように、前記メモリブロック識別子総表803に記録されるのは、ニューラルネットワークの各層のために生成したメモリブロック識別子である。よって、該表に出現するメモリブロック識別子について言えば、その対応するメモリブロックは、すべて、ニューラルネットワークのフォワード計算に使用される。従って、ニューラルネットワークのフォワード計算の開始の準備として、先に必要なメモリを割り当ても良い。また、ニューラルネットワークのフォワード計算に必要なメモリは、前記メモリブロック識別子総表803に基づいて生成することができ、例えば、1つのメモリブロック識別子のために、対応して1つのメモリブロックを生成し、生成したメモリブロックの容量は、メモリブロック識別子に関するメモリブロック記述子に基づいて確定することができる。
【0091】
本開示では、メモリブロック識別子のためにメモリブロックポインターを生成することにより、該メモリブロックポインターが真のメモリブロックに指向し、メモリブロック識別子のために、一対一対応して真のメモリブロックを生成するようにさせることができる。
【0092】
ステップS202では、出力とメモリブロック識別子との前記マッピング表に記録のマッピング関係に基づいて、各層の出力を、マッピング関係を有するメモリブロック識別子のメモリブロックポインターと関連付けさせる。
【0093】
前述のように、出力とメモリブロック識別子との前記マッピング表に記録されるのは、各出力とメモリブロック識別子との間のマッピング関係である。よって、現在の層の出力を、マッピング関係を有するメモリブロック識別子のメモリブロックポインターと関連付けさせ、現在の層の出力のためにメモリを割り当てることにより、真のメモリ割り当てを実現することができる。換言すると、ステップS100におけるメモリ事前割り当てに基づいて、ステップS200のメモリの真の割り当てを実現することができる。
【0094】
本ステップでは、各層において、出力とメモリブロック識別子との前記マッピング表802を参照することで、該層の出力のメモリ割り当て結果を得ることができ、各層において、すべて、再び申し込む及び再びメモリを計算及び割り当てる必要がないから、リアルタイムに申し込む及びメモリを割り当てる時間を節約し、ニューラルネットワークのフォワード計算の速度を上げることができる。
【0095】
以下、例を挙げて如何に本開示の1つの例示的な実施例においてニューラルネットワークのフォワード計算のために予めメモリを割り当てる方法を実現するかを説明する。なお、本例では、必ずしも上述の各詳細なステップ又は操作が行われないが、当業者は本文に述べた内容及びコンテキストに基づいて、行われないステップ又は操作が如何に実現されるかを理解すべきである。
【0096】
例えば、TensorFlow(Googleが開発しオープンソースで公開している、機械学習に用いるためのソフトウェアライブラリである)により、1つのニューラルネットワークにおける各層の演算を1つの演算(operation)クラスに抽象化することができ、各演算クラスには上述の入力集合804及び出力集合805が含まれても良く、前記入力集合804及び出力集合805における各入力及び各出力はすべてテンソル(tensor)クラスに抽象化することができる。テンソルクラスにはテンソルの識別子(例えば、テンソルの名称)、テンソルの形状、及び該テンソルのアドレスポインターが含まれる。
【0097】
TensorFlowはテンソルを用いてデータを表す。テンソルは一種のデータ構造であり、n次元データと見なすことができる。テンソルは3つの属性、即ち、次元数、形状(第i次元の要素数を示し、i=1,2,…,nである)、及びデータ類型を有する。
【0098】
そのうち、テンソルの識別子は例えばテンソルの名称であっても良い。テンソルの形状は第i次元の要素数を示すために用いられ、テンソルの形状により、その容量を容易に得ることができる。テンソルのアドレスポインターは該テンソルが使用するメモリアドレスに指向するために用いられ、即ち、前に述べた“メモリブロックポインター”である。
【0099】
ニューラルネットワークについて言えば、1つの層において1つの演算、例えば、畳み込み演算、プーリング演算などを行う。
【0100】
各層における演算について、例えば、以下に示す演算クラスを用いて表すことができる。
【0101】
Class operation{
Vector inputs;[Tensor1,Tensor2,…] /*入力集合及びテンソル形式の要素*/
Vector outputs;[Tensor1,Tensor2,…] /*出力集合及びテンソル形式の要素*/
}
上述の入力及び出力を表すために用いられ得るテンソルクラスについて、以下のような例示的な形式が与えられる。
【0102】
Class Tensor{
String name:”layer1-conv” /*テンソルの識別子*/
Shape:[300,300,3] /*テンソルの形状*/
Pointer:null /*テンソルのアドレスポインターであり、メモリ事前割り当て過程では空である*/
Datatype:int /*テンソルのデータ類型であり、選択可能なデータ類型はint、short、floatなどがある*/
}
そのうち、テンソルの形状[300,300,3]及び該テンソルクラスに定義されるデータ類型int(各int類型データが4つのバイトのメモリを占用し得るとする)から、該テンソル(入力又は出力)のデータ量が300*300*3*4=1080000バイトであることが取得され得る。
【0103】
テンソルのアドレスポインター(メモリブロックポインター)について、ステップS220でメモリ割り当てを行った後に、それは空でないため、対応するメモリブロックのアドレスに指向することができ、1つの例として次の通りである。
【0104】
Class Pointer{
Size:300*300*3*4 /*テンソルの形状から得たテンソルのデータ量*/
Address:0x80000000 /*テンソルのアドレスポインターが指向するアドレス*/
}
以上、入力及び出力とされ得るテンソルの実施例、及び、メモリブロックポインターとされ得るテンソルのアドレスポインターの実施例を示した。
【0105】
1つのニューラルネットワークのフォワード計算に対するメモリ事前割り当てのタスクについて言えば、先にニューラルネットワーク構造を解析し、該構造に含まれる各演算ノード及び各演算ノード間の関係を確定し、その後、1つの1次元の演算ベクトルリスト、例えば、[operation1,operation2,…]を構築することができる。このベクトルリストには、該ニューラルネットワークのすべての演算及びこれらの演算の実行順序が記憶されても良い。該ベクトルリストにおける各演算ベクトル(演算クラス)により、各演算クラスにおける入力集合及び出力集合を取得することができる。
【0106】
上述の表801~807について言えば、そのうちの入力識別子及び出力識別子は、前に例を挙げて説明したテンソルの識別子であっても良く、1つの入力又は出力のデータ量は、前に例を挙げて説明した方法により確定した、該入力又は出力としてのテンソルのデータ量であっても良い。
【0107】
以下、例を挙げて本開示の例示的な実施例におけるメモリ予め割り当て方法を用いてニューラルネットワークのフォワード計算のためにメモリを割り当てる過程を説明する。なお、以下に示す具体的なステップ及びその実行順序は例示に過ぎず、本開示はこの例示的な実施方式に限定されない。
【0108】
具体的には、該例のステップは以下の通りである。
【0109】
ステップ1):上述の演算ベクトルリストに基づいて、例えば、順に演算ベクトルリストにおける各演算について、出力の引用回数を統計することができる。
【0110】
上述のように、出力と引用回数との対応表806を用いて、出力と引用回数との間のマッピング関係を記録及び更新することができる。
【0111】
そのうち、前述のように、該演算ベクトルリストにおける各演算ベクトル(演算クラス)により、各演算クラスにおける入力集合及び出力集合を得ることができる。よって、演算自体(その入力及び出力)及び演算間の関係(例えば、演算順序)に基づいて、出力とその引用回数との間のマッピング関係を得ることができ、これにより、出力と引用回数との対応表806を得ることができる。
【0112】
ステップ2):上述の演算ベクトルリストに基づいて、そのうちの各演算について、該演算の出力集合における出力テンソルを取得し、各出力テンソルについて、次のような、該演算(即ち、該層)における各出力テンソルのために1つのメモリブロック識別子をマッピングする操作を行う。
【0113】
i.上述のアイドルメモリブロック識別子表801から1つのメモリブロック識別子を取得する試みを行う。
【0114】
ii.上述のアイドルメモリブロック識別子表801から、該出力テンソルのために1つのメモリブロック識別子を取得した場合、メモリブロック識別子に基づいて、使用済みメモリブロック識別子と容量とのマッピング表(メモリブロック記述子)807をサーチ(lookup)することで、該出力テンソルのデータ量(該出力に必要なデータ量)と、メモリブロック記述子807に記録のメモリブロック容量との比較を行う。
【0115】
なお、使用済みメモリブロック識別子と容量とのマッピング表(メモリブロック記述子)807に記録されるのはメモリブロック識別子及びその対応するメモリブロックの容量であり、該表は空に初期化することができる。また、1つの出力テンソルについて1つのメモリブロック識別子を新しく生成した後に、該表に記録の該メモリブロック識別子に対応するメモリブロック容量は該出力のデータ量であり、また、上述のように、逐層の事前計算に伴って、該メモリブロック識別子に対応するメモリブロック容量は、対応する出力が異なることによって異なり、より具体的に言えば、該メモリブロック識別子の後続の対応する或る出力のデータ量が、その前の対応する或る出力のデータ量よりも大きい場合、該メモリブロック識別子に対応するメモリブロック容量もそれに伴って大きくなる。以下、詳細に説明する。
【0116】
iii.メモリブロック記述子807に記録の対応するメモリブロック容量が該出力テンソルのデータ量よりも小さいときに、該出力テンソルのデータ量に基づいて該メモリブロック容量を更新することにより、該メモリブロック容量が少なくとも該出力テンソルのデータ量に等しくなるようにさせ、その後、該メモリブロック識別子をアイドルメモリブロック識別子表から除去し、且つ該出力テンソルの識別子と該メモリブロック識別子とを1対のマッピング関係として出力とメモリブロック識別子とのマッピング表802に入れることにより、将来該演算を行うときに該出力テンソルが該メモリブロック識別子に対応するメモリブロックを占用することを表すことができる。
【0117】
iv.上述のアイドルメモリブロック識別子表801から、該出力テンソルのために1つのメモリブロック識別子を得ることができない場合、新しいメモリブロック識別子を生成し、該新しく生成したメモリブロック識別子をメモリブロック識別子総表803に格納し、そして、該出力テンソルの識別子と、新しく生成した該メモリブロック識別子とを1対のマッピング関係として、出力とメモリブロック識別子とのマッピング表802に入れることにより、将来該演算を行うときに該出力テンソルが該メモリブロック識別子に対応するメモリブロックを占用することを表すことができる。
【0118】
前述のように、該表803には、すべての新しく生成したメモリブロック識別子、即ち、該ニューラルネットワークのフォワード計算に使用する予定があるすべてのメモリブロック識別子が格納される。
【0119】
v.該演算における各出力テンソルについて上述の操作を行っているかを判断し、いいの場合、ステップi)に移行して引き続き実行し、はいの場合、以下のステップ3)に移行する。
【0120】
ステップ3):上述の演算ベクトルリストに基づいて、その中の各演算について、該演算の入力集合における入力テンソルを取得し、該演算の入力集合における入力テンソルについて、以下のような、入力テンソルに基づいて、出力テンソルの引用関係について、アイドルメモリブロック識別子表801を更新する操作を行う。
【0121】
i.各入力テンソルについて、出力と引用回数との対応表806のうちから、該入力テンソルの識別子(該入力テンソルが前の層の出力テンソルからのものである場合、それが引用する前の層の出力テンソルの識別子である)と、引用回数とのマッピング関係を見つける。
【0122】
ii.該表806のうちから該マッピング関係を見つけた場合、該マッピング関係における引用回数から例えば1をマイナスすることにより、該層の該入力の該出力に対する引用(該層の引用回数が1である)を先にマイナスし、引用回数が1をマイナスした後に0なる場合、前の層の該出力テンソルがその後に引用されないことを表し、その対応するメモリブロック識別子はアイドル状態になっても良い。よって、該メモリブロック識別子をアイドルメモリブロック識別子表に入れることにより、ニューラルネットワークのフォワード計算の実行時のメモリ再利用を実現することができる。
【0123】
iii.このようなマッピング関係を見つけることができない場合、該入力テンソルが何れの出力テンソルを引用しないことを意味し、このときには、以下のステップivに進むことができる。
【0124】
iv.該演算に入力テンソルがまだあるかを判断し、ある場合、上述のステップiに移行し、ない場合、以下のステップ4に移行する。
【0125】
上述の例示的なステップ1)~3)により、本開示の例示的な実施例においてニューラルネットワークのフォワード計算のために予めメモリを割り当てる方法を実現することができる。前述のように、該方法を用いることにより、ニューラルネットワークのフォワード計算の速度を上げ、メモリの利用率を向上させることができる。
【0126】
以下のステップ4)では、例示的に、ニューラルネットワークのフォワード計算の実行の前に行うメモリ割り当て操作を与える。
【0127】
ステップ4):出力とメモリブロック識別子との前記マッピング表802における各メモリブロック識別子について、該メモリブロック識別子に対応するメモリブロックポインター(テンソルのアドレスポインター)を生成し、その後、出力とメモリブロック識別子との前記マッピング表802に記録の各層(各演算)の各出力と、メモリブロック識別子とのマッピング関係に基づいて、各出力を、マッピング関係を有するメモリブロック識別子のメモリブロックポインター(テンソルのアドレスポインター)と関連付けさせ、このようにして、例えば、ニューラルネットワークのフォワード計算の初期化過程においてメモリを割り当てることができ、ニューラルネットワークのフォワード計算の過程において直接、割り当てられたメモリを使用することができ、これにより、ニューラルネットワークのフォワード計算を大幅に加速することができる。
【0128】
以上、TensorFlowを例にとって本開示の1つの例示的な実施方式について説明した。なお、本開示は実現方式に限られず、本開示を実現することができる任意の方式を採用しても良い。
【0129】
幾つかの実施例によれば、図14に示すように、本開示は、ニューラルネットワークのフォワード計算のために予めメモリを割り当てる装置1(予めメモリを割り当てる装置1とも言う)を提供し、それは、計算ユニット100及び事前割り当てユニット200を含む。
【0130】
そのうち、計算ユニット100は、ニューラルネットワークの第一層から、順に配列されるニューラルネットワークの各層について、以下の操作を行うように構成されても良い。
【0131】
現在の層の各出力について、アイドルメモリブロック識別子を記録するためのアイドルメモリブロック識別子表からメモリブロック識別子を取得する試みを行う。
【0132】
取得した場合、該出力の識別子と、取得したメモリブロック識別子とを1対のマッピング関係として、該層の各出力の識別子と、対応するメモリブロック識別子とを記録するために用いられる出力とメモリブロック識別子とのマッピング表に入れ、そして、アイドルメモリブロック識別子表から該メモリブロック識別子を削除する。
【0133】
取得することができない場合、1つのメモリブロック識別子を新しく生成し、該出力の識別子と、新しく生成した該メモリブロック識別子とを1対のマッピング関係として、出力とメモリブロック識別子との前記マッピング表に格納し、そして、新しく生成した該メモリブロック識別子を、新しく生成したすべてのメモリブロック識別子を記録するためのメモリブロック識別子総表に格納し、これにより、ニューラルネットワークのフォワード計算を行うときに、該メモリブロック識別子総表に基づいて、ニューラルネットワークのフォワード計算に必要なメモリブロックを生成することができる。
【0134】
現在の層の各入力について、該入力としての前の層の出力が該現在の層の後続層の入力とされない場合、該入力としての前の層の出力に対応するメモリブロック識別子をアイドルメモリブロック識別子表に格納する。
【0135】
なお、計算ユニット100の操作が前述のステップS100の操作と同様であるため、ここではその詳しい説明を省略する。
【0136】
幾つかの実施例によれば、図14に示すように、予めメモリを割り当てる装置1はさらに事前割り当てユニット200を含んでも良い。
【0137】
そのうち、該事前割り当てユニット200は、前記メモリブロック識別子総表における各メモリブロック識別子のために1つのメモリブロックポインターを生成し、及び、出力とメモリブロック識別子との前記マッピング表に記録のマッピング関係に基づいて、各層の出力を、マッピング関係を有するメモリブロック識別子のメモリブロックポインターと関連付けさせるように構成されても良い。
【0138】
なお、事前割り当てユニット200の操作が前述のステップS200の操作と同様であるから、ここではその詳しい説明を省略する。
【0139】
前述のように、本開示の予めメモリを割り当てる装置1を用いることにより、ニューラルネットワークのフォワード計算の速度を上げ、メモリの利用率を向上させることができる。
【0140】
本開示のもう1つの側面によれば、電子回路2100がさらに提供され、それは、上述の方法におけるステップを実行するように構成される回路を含む。本開示のまたもう1つの側面によれば、電子機器2000がさらに提供され、それは、処理器と、プログラムを記憶している記憶器とを含み、前記プログラムは指令を含み、前記指令は、前記処理器により実行されるときに、前記処理器に上述の方法を実行させる。本開示の他の側面によれば、プログラムを記憶している非一時的なコンピュータ可読記憶媒体がさらに提供され、前記プログラムは指令を含み、前記指令は、電子機器の処理器により実行されるときに、前記電子機器に上述の方法を実行させる。
【0141】
図15は、本開示の例示的な実施例の電子機器を示すブロック図である。なお、図15に示す構造は例示に過ぎず、本開示の電子機器は、具体的な実現方式に基づいて、図15に示す構成部分のうちの1つ又は複数を含んでも良い。
【0142】
電子機器2000は例えば、汎用コンピュータ(例えば、ラップトップコンピュータ、タブレットコンピュータなどの各種のコンピュータ)、携帯電話、個人用デジタル補助装置、及び各種のスマート装置であっても良い。
【0143】
幾つかの実施方式によれば、電子機器2000は通信回路2010を含んでも良く、前記通信回路2010は、外部装置及び/又はネットワークとの通信を可能にする任意の類型の装置又はシステムであっても良く、且つモデム、ネットワークカード、赤外線通信装置、無線通信装置及び/又はチップアセンブリ、例えば、ブルートゥース(登録商標)装置、1302.11装置、WiFi装置、WiMax装置、セルラー通信装置及び/又は類似物を含んでも良いが、これに限定されない。
【0144】
幾つかの実施方式によれば、電子機器2000はさらに入力装置2011を含んでも良く、前記入力装置2011は、電子機器2000に情報を入力し得る任意の類型の装置であっても良く、且つ各種のセンサ、マウス、キーボード、タッチパネル、ボタン、操縦桿、マイク及び/又はリモコンなどを含んでも良いが、これに限られない。
【0145】
幾つかの実施方式によれば、電子機器2000はさらに出力装置2012を含んでも良く、前記出力装置2012は、情報を表示し得る任意の類型の装置であっても良く、且つ表示器、視覚に基づく出力端末、振動器及び/又はプリンタなどを含んでも良いが、これに限定されない。電子機器2000は、幾つかの実施例によれば、視覚支援装置に用いることができ、このときには、視覚に基づく出力装置は、ユーザの親族などが電子機器2000から出力情報を取得するに便利である。
【0146】
幾つかの実施方式によれば、電子機器2000はさらに処理器2001を含んでも良い。前記処理器2001は任意の類型の処理器であっても良く、且つ1つ又は複数の汎用処理器及び/又は1つ又は複数の専用処理器(例えば、特殊処理チップ)を含んでも良いが、これに限定されない。処理器2001は例えば、中央処理ユニットCPU、マイクロプロセッサMPUなどであっても良いが、これに限られない。電子機器2000はさらにワーキング記憶器2002を含んでも良く、前記ワーキング記憶器2002は処理器2001のワーキングに有用なプログラム(指令を含む)及び/又はデータ(例えば、画像、文字、音声、及び他の中間データなど)を記憶するワーキング記憶器であっても良く、且つROM及び/又はRAMを含めても良いが、これに限定されない。電子機器2000はさらに記憶装置2003を含んでも良く、前記記憶装置2003は上述の各表801~807を記憶するために用いられても良い。記憶装置2003は任意の非一時的な記憶装置を含んでも良く、非一時的な記憶装置は非一時的で且つデータの記憶を実現し得る任意の記憶装置であっても良く、且つディスクドライブ、光ストレージデバイス、ソリッドステートメモリ、フロッピーディスク、フレキシブルディスク、ハードディスク、テープ又は他の磁気メディア、光ディスク又は他の光メディア、ROM(読み取り専用メモリ)、RAM(ランダムアクセスメモリ)、キャッシュメモリ、及び/又は、他のメモリチップ又はカートリッジ、及び/又は、コンピュータがデータ、命令、及び/又はコードを読み取ることができる他の媒体を含んでも良いが、これに限定されない。ワーキング記憶器2002及び記憶装置2003は“記憶器”と総称されても良く、且つ場合によっては、互いに使用され得る。
【0147】
幾つかの実施方式によれば、処理器2001は、通信回路2010、電子回路2100及び電子機器2000に含まれる他の各種の装置及び回路のうちの少なくとも1つに対して制御及びスケジューリングを行うことができる。幾つかの実施方式によれば、図15に記載の各構成部分のうちの少なくとも幾つかはバス2013により互いに接続及び/又は通信することができる。
【0148】
ソフトウェア要素(プログラム)がワーキング記憶器2002にあっても良く、オペレーティングシステム2002a、1つ以上のアプリケーションプログラム2002b、ドライバ及び/又は他のデータとコードを含んでも良いが、これに限定されない。
【0149】
幾つかの実施方式によれば、前述の制御及びスケジューリングを行うための指令は、オペレーティングシステム2002a又は1つ又は複数のアプリプログラム2002bに含まれても良い。
【0150】
幾つかの実施方式によれば、本開示の前述の方法におけるステップを実行するための指令は、1つ又は複数のアプリプログラム2002bに含まれても良く、且つ上述の電子機器2000の各モジュールは、処理器2001が1つ又は複数のアプリプログラム2002bの指令を読み取り及び実行することにより実現することができる。換言すると、電子機器2000は、処理器2001及びプログラムを記憶している記憶器(例えば、ワーキング記憶器2002及び/又は記憶装置2003)を含んでも良く、前記プログラムは指令を含み、前記指令は前記処理器2001により実行されるときに前記処理器2001に本開示の各種の実施例に記載の方法を実行させる。
【0151】
幾つかの実施方式によれば、電子回路2100における少なくとも1つの回路が実行する操作のうちの一部又は全部は、処理器2001が1つ又は複数のアプリログラム2002bの指令を読み取り及び実行することにより実現することができる。
【0152】
ソフトウェア要素(プログラム)の指令の実行可能なコード又はソースコードは非一時的なコンピュータ可読記憶媒体(例えば、前述の記憶装置2003)に記憶されても良く、且つ実行時にワーキング記憶器2002に保存(コンパイル及び/又はインストール)することができる。よって、本開示はプログラムを記憶しているコンピュータ可読記憶媒体を提供し、前記プログラムは指令を含み、前記指令は電子機器(例えば、視覚支援装置)の処理器により実行されるときに、前記電子機器に、本開示の各種実施例に記載の方法を実行させる。もう1つの実施方式によれば、ソフトウェア要素(プログラム)の指令の実行可能コード又はソースコードはリモート位置からダウンロードすることもできる。
【0153】
なお、具体的な要求に応じて各種の変形を行っても良い。例えば、カスタマイズされたハードウェアも使用でき、及び/又はハードウェア、ソフトウェア、ファームウェア、ミドルウェア、マイクロコード、ハードウェア記述言語、又はそれらの任意の組み合わせを使用して、様々な回路、ユニット、モジュール又は要素を実装することができる。例えば、開示された方法及びデバイスに含まれる回路、ユニット、モジュール又は要素の一部又はすべては、本開示の論理及びアルゴリズムに基づいて、アセンブリ言語又はハードウェアプログラミング言語(例えば、VERILOG、VHDL、C++)を用いてハードウェア(例えば、フィールドプログラマブルゲートアレイ(FPGA)及び/又はプログラマブルロジックアレイ(PLA)を含むプログラマブルロジック回路)に対してプログラミングを行うことにより実現することができる。
【0154】
幾つかの実施方式によれば、電子機器2000における処理器2001はネットワークに分布しても良い。例えば、1つの処理器を用いて幾つかの処理を実行しても良く、また、該1つの処理器を離れる他の処理器により他の処理を実行しても良い。電子機器2000の他のモジュールも同様に分布しても良い。このようにして、電子機器2000は、複数の位置で処理を実行する分布型計算システムと見なすこともできる。
【0155】
本開示では、ニューラルネットワークのフォワード計算のために予めメモリを割り当てる方法が提供され、該方法は、ニューラルネットワークの第一層から、順に配列されるニューラルネットワークの各層について、以下の計算ステップを行うことを含み、即ち、現在の層の各出力について、アイドルメモリブロック識別子を記録するためのアイドルメモリブロック識別子表からメモリブロック識別子を取得する試みを行い;取得した場合、該出力の識別子と、取得したメモリブロック識別子とを1対のマッピング関係として、出力とメモリブロック識別子とのマッピング表に格納し、そして、アイドルメモリブロック識別子表から該メモリブロック識別子を削除し、そのうち、出力とメモリブロック識別子との前記マッピング表は、該層の各出力の識別子と、対応するメモリブロック識別子とを記録するために用いられ;取得することができない場合、1つのメモリブロック識別子を新しく生成し、該出力の識別子と、新しく生成した該メモリブロック識別子とを1対のマッピング関係として、出力とメモリブロック識別子との前記マッピング表に格納し、また、新しく生成した該メモリブロック識別子を、新しく生成したすべてのメモリブロック識別子を記録するためのメモリブロック識別子総表に格納し、これにより、ニューラルネットワークのフォワード計算を行うときに、該メモリブロック識別子総表に基づいて、ニューラルネットワークのフォワード計算に必要なメモリブロックを生成し;及び、現在の層の各入力について、該入力としての前の層の出力が該現在の層の後続層の入力とされない場合、該入力としての前の層の出力に対応するメモリブロック識別子をアイドルメモリブロック識別子表に格納する。
【0156】
そのうち、各メモリブロック識別子は1つのメモリブロック容量に対応する。幾つかの実施例によれば、アイドルメモリブロック識別子表から取得したメモリブロック識別子に対応するメモリブロック容量が該出力に必要な容量よりも小さい場合、該メモリブロック識別子に対応するメモリブロック容量を拡張する。
【0157】
幾つかの実施例によれば、前記アイドルメモリブロック識別子を記録するためのアイドルメモリブロック識別子表からメモリブロック識別子を取得することは、アイドルメモリブロック識別子表に複数のアイドルメモリブロック識別子があり、且つ前記複数のアイドルメモリブロック識別子に対応するメモリブロック容量がすべて該出力に必要な容量よりも小さい場合、前記複数のアイドルメモリブロック識別子のうちから、対応するメモリブロック容量が最大であるアイドルメモリブロック識別子を、該出力とマッピング関係を有するメモリブロック識別子として選択する。
【0158】
幾つかの実施例によれば、前記アイドルメモリブロック識別子表から取得したメモリブロック識別子に対応するメモリブロック容量が該出力に必要な容量よりも小さい場合、該メモリブロック識別子に対応するメモリブロック容量を拡張することは、前記複数のアイドルメモリブロック識別子のうちから選択した、対応するメモリブロック容量が最大である前記アイドルメモリブロック識別子について、該メモリブロック識別子に対応するメモリブロック容量を、少なくとも該出力に必要な容量に等しくなるように拡張する。
【0159】
幾つかの実施例によれば、前記アイドルメモリブロック識別子表から取得したメモリブロック識別子に対応するメモリブロック容量が該出力に必要な容量よりも小さい場合、該メモリブロック識別子に対応するメモリブロック容量を拡張することは、該出力に必要な容量に基づいて、該メモリブロック識別子に対応するメモリブロック容量を拡張することにより、該メモリブロック容量を、少なくとも該出力に必要な容量に等しくなるようにさせる。
【0160】
幾つかの実施例によれば、前記アイドルメモリブロック識別子を記録するためのアイドルメモリブロック識別子表からメモリブロック識別子を取得することは、アイドルメモリブロック識別子表に複数のアイドルメモリブロック識別子がある場合、前記複数のアイドルメモリブロック識別子の各自の対応するメモリブロック容量と、該出力に必要な容量との比較を行い、該出力に必要な容量以上のメモリブロック容量のうちの、該出力に必要な容量との差が最小であるメモリブロック容量に対応するアイドルメモリブロック識別子を、該出力とマッピング関係を有するメモリブロック識別子として選択する。
【0161】
幾つかの実施例によれば、前記出力に必要な容量は、該出力のデータ量及びデータ類型に基づいて確定される。
【0162】
幾つかの実施例によれば、上述の方法はさらに、前記計算ステップの前に、それぞれ、ニューラルネットワークの各層のために、該層の入力集合及び出力集合を構築することを含み、そのうち、各層の前記入力集合における各要素は、該層の各入力の識別子、データ量、及び該入力を記憶するためのメモリブロックアドレスに指向するメモリブロックポインターを含み、各層の前記出力集合の各要素は、該層の各出力の識別子、データ量、及び該出力を記憶するためのメモリブロックアドレスに指向するメモリブロックポインターを含む。
【0163】
幾つかの実施例によれば、上述の方法はさらに、前記計算ステップを実行する前に、ニューラルネットワークにおける各出力が該出力の後続層の入力とされる回数を、該出力の引用回数として統計し、そして、各出力と、該出力の引用回数とのマッピング関係を記憶するための出力と引用回数との対応表を生成することを含む。
【0164】
幾つかの実施例によれば、前記ニューラルネットワークにおける各出力が該出力の後続層の入力とされる回数を、該出力の引用回数として統計し、そして、各出力と、該出力の引用回数とのマッピング関係を記憶するための出力と引用回数との対応表を生成することは、前記ニューラルネットワークの各層について、現在の層の各入力を取得し、そして、出力と引用回数との前記対応表に、該入力としての前の層の出力と、該出力の引用回数とのマッピング関係があるかを確定し、ある場合、該前の層の出力の引用回数に単位数量をプラスし;及び、現在の層の各出力を取得し、そして、出力と引用回数との前記対応表に、1対のマッピング関係としての該出力と該出力の引用回数とを新しく生成し、そのうち、該出力とマッピング関係を有する引用回数を第一所定値に初期化することを含む。
【0165】
幾つかの実施例によれば、各層について、前記計算ステップを実行することはさらに、現在の層の入力としての前の層の出力の引用回数から前記単位数量をマイナスすることにより、出力と引用回数との前記対応表を更新することを含む。
【0166】
幾つかの実施例によれば、前記入力としての前の層の出力が前記現在の層の後続層の入力とされない場合、該入力としての前の層の出力に対応するメモリブロック識別子をアイドルメモリブロック識別子表に格納することは、前記前の層の出力の引用回数が前記単位数量をマイナスした後に第二所定値になる場合、該前の層の出力に対応するメモリブロック識別子を前記アイドルメモリブロック識別子表に格納することを含む。
【0167】
幾つかの実施例によれば、取得又は生成したメモリブロック識別子と、対応するメモリブロック容量とを1対のマッピング関係として、現在の層に使用する、メモリブロック識別子と、対応するメモリブロック容量とを記憶するための使用済みメモリブロック識別子と容量とのマッピング表に記録し、また、メモリブロック容量の前記拡張に応じて、使用済みメモリブロック識別子と容量との前記マッピング表において対応するメモリブロック識別子のメモリブロック容量を更新する。
【0168】
幾つかの実施例によれば、出力とメモリブロック識別子との前記マッピング表には、前記ニューラルネットワークのすべての出力の識別子と、対応するメモリブロック識別子とのマッピング関係が記憶される。
【0169】
幾つかの実施例によれば、上述の方法はさらに以下のメモリ割り当てステップを含み、即ち、前記メモリブロック識別子総表における各メモリブロック識別子のために、1つのメモリブロックポインターを生成し;及び、出力とメモリブロック識別子との前記マッピング表に記録されるマッピング関係に基づいて、各層の出力を、マッピング関係を有するメモリブロック識別子のメモリブロックポインターと関連付けさせる。
【0170】
本開示では、ニューラルネットワークのフォワード計算のために予めメモリを割り当てる装置がさらに提供され、該装置は、前記ニューラルネットワークの第一層から、順に配列されるニューラルネットワークの各層について、以下の操作を行うように構成される計算ユニットを含み、即ち、現在の層の各出力について、アイドルメモリブロック識別子を記録するためのアイドルメモリブロック識別子表からメモリブロック識別子を取得する試みを行い;取得した場合、該出力の識別子と、取得したメモリブロック識別子とを1対のマッピング関係として、出力とメモリブロック識別子とのマッピング表に格納し、そして、アイドルメモリブロック識別子表から該メモリブロック識別子を削除し、そのうち、出力とメモリブロック識別子との前記マッピング表は、該層の各出力の識別子と、対応するメモリブロック識別子とを記録するために用いられ;取得することができない場合、1つのメモリブロック識別子を新しく生成し、該出力の識別子と、新しく生成した該メモリブロック識別子とを1対のマッピング関係として、出力とメモリブロック識別子との前記マッピング表に格納し、また、新しく生成した該メモリブロック識別子を、新しく生成したすべてのメモリブロック識別子を記録するためのメモリブロック識別子総表に格納し、これにより、ニューラルネットワークのフォワード計算を行うときに、該メモリブロック識別子総表に基づいて、ニューラルネットワークのフォワード計算に必要なメモリブロックを生成し;及び、現在の層の各入力について、該入力としての前の層の出力が該現在の層の後続層の入力とされない場合、該入力としての前の層の出力に対応するメモリブロック識別子をアイドルメモリブロック識別子表に格納する。
【0171】
幾つかの実施例によれば、上述の装置はさらに事前割り当てユニットを含み、該事前割り当てユニットは、前記メモリブロック識別子総表における各メモリブロック識別子のために1つのメモリブロックポインターを生成し;及び、出力とメモリブロック識別子との前記マッピング表に記録されるマッピング関係に基づいて、各層の出力を、マッピング関係を有するメモリブロック識別子のメモリブロックポインターと関連付けさせるように構成される。
【0172】
本開示では、電子回路がさらに提供され、該電子回路は、上述の方法を実行するための回路を含む。本開示では、電子機器がさらに提供され、該電子機器は、処理器と、プログラムを記憶している記憶器とを含み、前記プログラムは指令を含み、前記指令は、前記処理器により実行されるときに、前記処理器に上述の方法を実行させる。本開示では、プログラムを記憶している非一時的なコンピュータ可読記憶媒体がさらに提供され、前記プログラムは指令を含み、前記指令は、電子機器の処理器により実行されるときに、前記電子機器に上述の方法を実行させる。
【0173】
なお、図面を参照しながら本開示の実施例又は実施方式を説明したが、理解すべきは、上述の方法、システム及び装置は例示的な実施例又は実施方式に過ぎず、本開示の範囲はこれらの実施例又は実施方式により限定されず、特許請求の範囲及びその均等な範囲により限定されるということである。実施例又は実施方式における各種の要素は、省略されても良く又は他の均等な要素により置換されても良い。また、本開示に述べた順序とは異なる順序に従って各ステップを実行しても良い。さらに、各種の方式で実施例又は実施方式における各種の要素を組み合わせても良い。重要なのは、技術が進化するにつれて、ここで記載されている多くの要素を、本開示の後に現れる均等な要素により置き換えることができるということである。
図1
図2
図3
図4
図5
図6
図7
図8A
図8B
図9
図10
図11
図12
図13
図14
図15