#author("2025-02-28T02:31:30+01:00","","")
#author("2025-02-28T03:40:56+01:00","","")
[[堀]]

#memo(タイトル\n参考文献\n図 -vspase)

#ref(poster2021-0402 (1).tex,,tex)
#ref(11.png,,tex)
#ref(21.png,,tex)
#ref(recipe_no1.csv,,tex)

ポスター
#ref(poster2021-0402 (1).pdf,,ポスター10/22)
#ref(poster2021-1025 (1).pdf,,ポスター10/25)
#ref(poster2021-0402 (2).pdf,,ポスター10/28)
#ref(poster2025-1106.pdf,,ポスター11/01)

#memo(%%\n\begin{comment}\n\section{並列分散処理による解法の事例}\n現在の情報社会では,経済や社会の問題を解決したり,業務を支援したり付加価値向上行うために用いる,ビッグデータをとり扱うために様々なアルゴリズムやアプリケーションによって,システム,組織などに関するデータは日々収集され,大量のデータが生成されている.\n%%%%\nしかし問題となってくるのは,この莫大な量のデータを,効率的かつ高速に処理する手段である.この問題を解決する方法として並列分散処理という技術がある.並列分散処理とは,複数台のコンピュータをリンクさせて,複数のCPUや,メモリを同時に使用することで一つの計算処理を行うことである.これにより,処理性能や計算速度を向上させることができる.並列分散処理を行っているときのイメージを図\ref{並列分散}に示す.並列分散処理を行うメリットとしては,1台のコンピューターで実行するよりも短い時間で解を導くことができることや,1台では実装が難しい大規模の処理を実現できることが挙げられる\cite{安藤さん}.\n\n\n\begin{flushleft}\n\textbf{オーバーヘッド}\n\end{flushleft}\n\n並列分散処理における注意点としてオーバーヘッドが挙げられる.オーバーヘッドとは,コンピュータシステムで,何らかの処理を実行するときにかかる時間的,または空間的な費用やコンピュータにおける負荷のことを指す.\n並列分散処理におけるオーバーヘッドが,並列化によって得ることのできる性能の向上の恩恵を上回ってしまうことがありえる.\n\n例えば,複数のプロセス,スレッド上で並列分散処理を行おうとする際に,複数のプロセスと各スレッドの起動,終了の処理,並列化するためのデータの分割と結果の統合の処理などにかかる時間の合計などが,並列化によって削減された時間合計を超えてしまう場合,並列化したことがかえって処理性能の低下を引き起こすことに繋がってしまうことがある.また,物理的なプロセッサコアの数以上のプロセス,スレッドを起動させて並列分散処理を行っても,現在実行している処理の流れを一旦停止し,別の処理に切り替え,実行を再開するときに発生するオーバーヘッドがかさんでしまうため,これもかえって処理性能を低下させてしまう要因となることがある.\n\n%%%%%%%%%%%ここまでチェック済み\n\nまた,とあるタスクをどう分散させ,どう実行するか,複数のコンピュータによる処理結果はどう1つの結果にまとめたらよいか,などの問題があり,導入は容易ではなかったが,Apache HadoopやApache Spark,Daskなどの並列分散ソフトウェアが台頭したことによって並列分散処理の利用に対する敷居は低くなりつつある.現在,並列分散処理を行いたい場合に使われることの多いソフトウェアであるApache Hadoop,Apache Spark,Daskについて説明する.\n%\begin{description}\n\n\begin{flushleft}\n\textbf{Apache Hadoop}\n\end{flushleft}\n\nApache Hadoopとは,大規模なデータを効率的に管理し,分散処理するために用いられるソフトウェアの1つである.Hadoopは,オープンソースソフトウェアとして開発元のアパッチソフトウェア財団(Apache Software Foundation: ASF)が公開しており,Java言語での開発がされている\cite{Hadoop}.\n\n主なHadoopの機能として,複数のストレージ装置にペタバイト級の大量なデータを分散して保存すること,データを複数のコンピュータに分散して並列に解析処理を行ったりすることがHadoopによって提供される.大規模なデータを解析することを目的とする開発者は,並列分散したい処理を記述するだけで,データをどうやって振り分けするかや,それぞれのコンピュータによって処理した結果の結合などを,自動的にHadoopが行う.\n\n\n\begin{figure}[t]%[htbp]\n  \begin{minipage}[b]{0.45\linewidth}\n    \centering\n    \includegraphics[keepaspectratio, scale=0.40]{./Figure/ヘイレツ}\n    \caption{並列分散処理のイメージ}\n    \label{並列分散}\n  \end{minipage}\n\hspace{3em}\n  \begin{minipage}[b]{0.45\linewidth}\n    \centering\n    \includegraphics[keepaspectratio, scale=0.6]{./Figure/dask2}\n    \caption{Daskのデータフレームのイメージ}\n    \label{dask}  \n  \end{minipage}\n\end{figure}\n数々の要素によってHadoopは構成されており,それぞれの要素で共通の基盤となるHadoop Commonや,分散処理の管理を行うHadoop MapReduce,分散ファイルシステムであるHDFS(Hadoop Distributed File System: HDFS),複数のコンピュータで構成されるクラスタ上のリソースを管理したり,処理を最適な順番で行うスケジューリングなどを管理するYARNなどの要素が組み込まれている.\n\nHadoop MapReduceは,Google社によって発案された\cite{MapReduce},分散処理のメカニズムである,MapReduceを搭載したソフトウェアのことである.MapReduceは,与えられたデータを分割してそれぞれのノードに振り分けるMapプロセスと,それぞれのノードの計算処理による結果を収集して,最終的な処理結果を1つにまとめる,Reduceプロセスによって構成されている.2つの処理は,両方とも並列化が可能であり,扱うデータが増加しても,計算処理を行うノード台数を増やすことによって,処理時間の短縮を図ることができる.\n\nHDFSは,分散型のファイルシステムであり,分散処理のための大量なデータを,効率的に管理する機能を持っている.具体的には,一定の容量でブロック単位に大量のデータを分割し,多数のノードに複製することで保管するという仕組みになっている.ノードが故障したりなどして,一部のデータが消去されてしまっても,複数あるノードに複製されたデータから自動的に復元されるため,1つの機器で保管や管理をすることが不可能な,ペタバイト級の大容量なデータを簡単に扱うことが可能となっている.\n\nHadoop MapReduceは,Google社が発案したMapReduce技術を,HDFSはGoogle File System\cite{GFS}をそれぞれ模造することでデザインされている.しかし,元の技術との直接の互換性や,共通しているプログラムコードはないため,概念的,機能的な類似のみとなっている.\n\n\begin{flushleft}\n\textbf{Apache Spark}\n\end{flushleft}\n\nApache Sparkは,大規模なデータを,複数のコンピュータに分散して並列で処理を行わせるソフトウェアの1つである.ASFによって開発され,Apacheライセンスに基づき,オープンソースソフトウェアとして公開されている\cite{Spark}.\n\n複数のコンピュータを束ね,大規模なデータを分散しながら保管し,並行して計算処理を行う.その際に,各コンピュータへのデータの振り分けや実行の指示,実行結果の統合などは, 管理用のサーバであるCluster Managerによって行われる.\n\nSparkは,データをRDD(Resilient Distributed Datasets: RDD)と呼ばれる管理の単位に分割してそれぞれのノードで管理する.RDDは,メインメモリ上で管理され,必要に応じてストレージに記録される.そのため,ストレージへの記録と読み込みを毎回繰り返さなくても済むため,高速で処理を行うことができる.\n\nHadoopでは1回の分散処理ごと実行結果をストレージに記録するため,機械学習などの用途では性能が落ちてしまうという問題があったが,Sparkはそれぞれのノード上のメモリを有効活用できるため,用途によってはHadoopよりも高速に機能する.\n\nまた,SparkはWindowsやLinuxなどのプラットフォームに対応しており,JavaやScalaなどのプログラミング言語での記述がサポートされている.さらに,Java APIを経由し,実行環境にJava仮想マシンを利用する,JVM言語のサポートも行われている.\n\n拡張機能として,ノードやデータ,分散処理の管理をするSpark Coreや,管理下のデータに対してSQLによる問い合わせと処理を行うSpark SQL,グラフの処理などの機能を提供するGraphXなどが用意されている.\n\n\begin{flushleft}\n\textbf{Dask}\n\end{flushleft}\n\nDaskは,Matthew Rocklinによって開発されたコミュニティプロジェクトであり,並列分散処理行うために用いられるソフトウェアである.効率的な数値計算を行うための多次元配列のサポートとそれを操作できるように拡張された,Pythonのライブラリの1つであるNumpyや,データ解析を支援するために,時系列データや数表を操作できるデータ構造とその演算を提供している,Numpyと同様にPythonのライブラリであるPandasを,Daskは簡単に並列・分散して処理を行うことが可能である.また,Daskは,上記の2つのライブラリと競合するライブラリではなく,それらをより高機能にしたラッパーライブラリのようになっている.\n\nDaskによる分散処理は,大量のデータを複数のブロックについて分割してから,処理することにより実現される.この仕組みによって,分割されたブロックは,1度に全てのデータを読み込む必要がなくなるため,メモリ消費のピーク値を大幅に抑えることが可能となる.\n\nDaskでは,いくつかのNumpy配列を格子状に配置された状態を1つのDask配列とみなし,Numpy配列単体がDask上でのチャンクサイズとなり,同様に,Daskのデータフレームは図\ref{dask}のように,いくつかのPandasデータフレームで構成される.\n\nDaskは主にデータ分析や機械学習に利用されていて,本研究にも使われるモジュールの一つであるPandasは,大容量のデータを処理する際には,分析に使われるデータが,メモリに収まらないことや,基本的に単一のスレッドで処理が行われるため,処理速度が遅いことが問題に上げられる.Daskによる並列分散処理を行うことで,それらの問題は解決され,プログラムの処理速度向上に繋がる.\n\n\n本研究などの組み合わせ最適化は膨大な量のデータから近似最適解を探索し,処理のたびに評価し,さらなる最適解を検討しているため,最適解を求める時間が長くなり,システムとして実用的ではないことが多い.そのため,組み合わせ最適化を適応したシステムに並列分散処理を施して短い時間で解を導いている事例もいくつか存在する.\n\end{comment})

卒論
#ref(1915077_水上和秀.pdf,,本論1028)

#ref(n1126.pdf,,本論1209)
#ref(1216.pdf,,本論1216)
#ref(1223.pdf,,本論1220)
#ref(1223.pdf,,本論1223)
#ref(0107.pdf,,本論0107)
#ref(0121.pdf,,本論0121)
#ref(0131.pdf,,本論0131)
#ref(0204.pdf,,本論0204)
#ref(0206.pdf,,本論0206)
#ref(2120040_堀由隆.pdf,,2120040_堀由隆)
#ref(2120040_堀由隆.docx,,2120040_堀由隆_概要)
#ref(2120040_堀由隆_概要.pdf,,2120040_堀由隆_概要)
#ref(2120040_堀由隆1.pdf,,2120040_堀由隆_概要1)
#ref(0207.pdf,,210040)
#ref(0210.pdf,,発表資料)
#ref(2120040しん.pdf,,2120040_堀由隆)
#ref(0228.pdf,,2120040_堀由隆_最終版)
#ref(02281.pdf,,2120040_堀由隆_最終版)

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS