脳汁portal

アメリカ在住(だった)新米エンジニアがその日学んだIT知識を書き綴るブログ

Unityのmetaファイルが持つguidを変更する

前提

  • Unityでは各ファイルに対してメタファイルが自動で生成される
  • このmetaファイルの中でguidというパラメータが設定されている
  • 他のオブジェクトとの相関性などは、ファイル名ではなくこのguidをもとにして行われている
fileFormatVersion: 2
guid: 14f9hogehogehogehogefugaugasdfd7fc21a  //<== これ
timeCreated: 1467869181
licenseType: Free
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData: 
  assetBundleName: 
  assetBundleVariant: 

問題

  • スクリプトリファクタリングをするときなど、適当な名前のファイルとしてコピーし、後で同名ファイルを削除して置き換えるというようなことをした場合、ファイル名は同じだが生成されたmetaファイルのguidが異なるので、他のオブジェクトとの関連性がリセットされてしまっている。
  • もう一つ問題として、パッケージをexportして別プロジェクトへimportする場合があるが、このとき同じguidが使われていると全く別のファイルにも関わらず同じguidのオブジェクトが上書きされてしまう

解決方法

  • 上の方の問題に関してはそもそも該当のファイルを直接編集すればいいが、下のimport問題が少しやっかいで、この場合ファイルのguidを変えてやる必要がある
guidの変更
  • 試しにmetaファイルを削除してUnityを起動してみたところ、新しく新規にmetaファイルが作成されたのでいけるかと思ったが、まさかの消したはずのguidと同じguidが再度生成されていた。
  • なので現在は少し強引ではあるが、Duplicateで同じファイルを作成し(この時点で違うguidをもつmetaファイルが生成される)、これをもとにパッケージをexportすることにしている。
  • もちろんmetaファイルを直接編集してもいいのだが、低い確率で他のファイルが既に利用しているguidにしてしまった場合、問題の発見が困難になってしまう
    • DuplicateだとUnityの機能で行うので、Unityが重複のないguidをアサインしてくれる

他にいい方法があるような気がしないでもない・・・

GPGPU用語集てきなもの

備忘録

CNN

BLAS

ATLAS

  • Automatically Tuned Linear Algebra Software
  • 自動で最適化されたBLASライブラリを作成するオープンソースライブラリ

OpenBLAS

MKL

  • Intel製CPUに最適化されたライブラリ
  • ライセンス購入をする必要がある
  • Intel製のCPU環境ではATLASよりもパフォーマンスがいいらしい(Intel側のレポート)

OpenCV

  • Computer Visionのためのライブラリ
  • 画像の入出力や一部を切り抜く際などに利用されている

LevelDB

  • KVS
  • DB内部でよくアクセスされるデータを段階的に分けることでアクセス効率がよくなる
  • Caffeでは学習データおよび評価データをそれぞれ一つのDBにまとめてから、それを利用してモデルの学習を行う

LMDB

  • KVS
  • LevelDBでは内部のデータにアクセスする際にロックがかかる仕様になっているため、複数のCaffeプロセスが単一のDBにアクセスすることが出来ない
  • この問題を解決するために単一のDBへの同時アクセスできるLMDBが導入された

HDF5

  • 大量の数値データをほぞんすることに適したファイルフォーマットとそれを操作する機能を提供するライブラリ

Blob

  • Binary Large OBject

MPI

  • Message Passing Interface
  • 分散メモリ間のメッセージ通信APIの規格
  • 実装でメジャーなものとしてOpen MPI とmpichがある

GPUDirect

  • CUDAを使ってGPUと同じバスに繋がっている(他のGPUを含む)デバイスに対して、GPUから直接アクセスする技術
  • CPUを経由しない高速なデータ転送が実現でき、GPU間のデータ同期やネットワークデバイスを使った他のノードとの通信を効率的に行うことが出来る
  • この技術を使ったGPU間の直接データ転送をPeerアクセスと呼ぶ
  • Peerアクセスを使うことで、他のGPUで割り当てたデバイスメモリに対して、カーネルやcudaMemcpy系の関数で、直接アクセスすることができるようになる
  • teslaとQuadroのみのプレミアム機能(GeForceでは使えたという報告もあるが要確認)

RDMA

RDMAとは

Remote Direct Memory Access
DMA(Direct Memory Access)はCPUが介在することなくホストメモリへアクセスを行うデバイスの機能
RDMA(Remote DMA)はCPUが関与することなくネットワーク越しにリモート計算機上のメモリへアクセスする機能

RDMAをサポートするネットワークプロトコル
  • InfiniBand
    • はじめからRDMAをネイティブサポートする新世代ネットワークプロトコル
    • 対応のNIC(HCA: Host Channel Adapter)とスイッチが必要となる
  • RoCE
  • iWARP
RDMAを使うには?

LInuxの主要なDistributionでRDMAをサポートしている

NVIDIA GPUDirect RDMA

f:id:portaltan:20161014215950p:plain

GPU tip

Tesla and Quadro-class GPUSで使える

messaging system

open MPIとMVAPICH2がGPUDirectをサポートしている(CUDA-aware MPI経由で)

Environment

Infiniband

infinibandとは非常に高いRAS(信頼性・可用性・保守性)をもつI/Oバスアーキテクチャ及びインターコネクトのこと
f:id:portaltan:20161014220038j:plain

  • オープンスタンダードなインターコネクト・プロトコル
  • 広帯域・低レイテンシ・高RAS
  • HPC/エンタープライズデータセンタ/高い画像処理能力を必要とする医療機器や検査装置などで使用されている

確認方法