電子計算記

個人的な検証を

3. MPIクラスターを作ろう! - OpenMPIをインストール

前回のつづきです。
2. MPIクラスターを作ろう! - MPI何にする? - 電子計算記

では、まずは1台仮想マシンを作成しましょう。
仮想マシンの作成は、本題ではないので既存のマニュアルにまかせます。

www.idcf.jp

オンラインマニュアルの他、クイックガイドもあるので、お好みの方をどうぞ。

https://www.idcf.jp/help/cloud/guide/pdf/IDCFCloud_installation_guide.pdf


さて、この仮想マシン作成時に、ポイントがあります。

リージョンは、東日本リージョン2を選んでください。
オールフラッシュストレージや低レイテンシーのネットワークが利用できます。

マシンタイプは、必要なスペックを選んでくれればよいですが、以降はLight.S1で進めます。安いから。

イメージは、先のとおりUbuntu16.04での例です。

ボリュームは、追加なしのそのままで大丈夫です。

SSH Keyは新たに作成してください、この後使いまわします。

仮想マシン名はcompute-1という名前で作成します。例の中でもこの名前を使います。

仮想マシン作成後は、上記マニュアルを参考にしつつSSHで接続してください。


SSH接続後、まずはOSをアップデートし、OS再起動しておきます。

root@compute-1:~# apt update
root@compute-1:~# apt upgrade -y
root@compute-1:~# reboot

再度SSH接続後、以下のとおりOpenMPIをネットワークインストールします。

root@compute-1:~# apt install openmpi-bin libopenmpi-dev -y

以上終了です、超簡単ですね。パスも通ってるのでほんとにこれで終了です。
libopenmpi-devも入れたので開発環境も入りました。

一応、実行可能か確認しておきます。
まずはコンパイラから。

root@compute-1:~# mpicc --version
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.5) 5.4.0 20160609
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

gccにラップされてるので、gccのバージョンが出てくれば成功です。余談ですが、mpicc自身のバージョンは

root@compute-1:~# mpicc --showme:version
mpicc: Open MPI 1.10.2 (Language: C)

と確認できます。

次に、実行環境を試してみましょう。

root@compute-1:~# mpirun --version
mpirun (Open MPI) 1.10.2

Report bugs to http://www.open-mpi.org/community/help/

これでだいたい実行できることは確認できたので、mpirun越しにノード内でコマンドを実行してみましょう。
オプション-np 1として1プロセス動かし、試しにhostnameコマンドでホスト名を出します。

root@compute-1:~# mpirun -np 1 hostname
--------------------------------------------------------------------------
mpirun has detected an attempt to run as root.
Running at root is *strongly* discouraged as any mistake (e.g., in
defining TMPDIR) or bug can result in catastrophic damage to the OS
file system, leaving your system in an unusable state.

You can override this protection by adding the --allow-run-as-root
option to your cmd line. However, we reiterate our strong advice
against doing so - please do so at your own risk.
--------------------------------------------------------------------------

するとrootで実行するなと怒られます。今回は動作確認したいだけなので、オプション入れて回避します。

root@compute-1:~# mpirun --allow-run-as-root -np 1 hostname
compute-1.cs30idcfcloud.internal

無事動きました。とは言え、毎回長いオプション入れるのも面倒なので、素直に警告にしたがい
次回はユーザー作成し、テスト用のコードを実行していきます。

fujish.hateblo.jp

2. MPIクラスターを作ろう! - MPI何にする?

前回のつづきです。
1. MPIクラスターを作ろう! on IDCFクラウド - 電子計算記

実際にMPIクラスターを構築していく前に、肝心のMPIのディストリビューションを何にするかというお話。
MPI自体は規格なので、それを実装するOSSIntel MPIのような商用環境もあります。


10年以上前に、私が学生だったときは、MPICHが流行っていました。

MPICH | High-Performance Portable MPI

あとは、OSから含めてインストールするようなときはSCoreを使っていたりしました。

PCクラスタコンソーシアム

その後、RedHatやUbubntuでは標準のMPI環境としてOpenMPIが搭載されています。

Open MPI: Open Source High Performance Computing

最近、HPC界隈に顔を出すと、MVAPICHの名前も上がりますね。ただ、触ったことないしちゃんと調べたこともないです。

MVAPICH :: Home


ということで、今回はLinuxでサクっとMPIクラスターを作りたいのでOS標準のOpenMPIを使って構築していきます。
Linuxディストリビューションは、CentOS7かUbuntu16.04のどちらでもよいですが、使い慣れてるUbuntuでいきます。
ただ、Ubuntu16.04のOpenMPIのバージョンは1.10と古いので注意です。(コマが余れば新しいのビルドしてインストールするとかもやりたいな)

次回から構築にはいります。

fujish.hateblo.jp

1. MPIクラスターを作ろう! on IDCFクラウド

IDCFクラウドのアドカレがガラ空きだな、クリスマスも終わったし私物化してやろう。
ネタはそうだな、

自分専用スパコンを作ろう!

んー、スパコンは言い過ぎだな。

PCクラスタを作ろう!

んー、クラウド上で作るからPCじゃないしな。

ベオウルフ型クラスターを作ろう!

んー、古臭い言い方だな。

並列計算機を作ろう!

んー、これも古いかな。

MPIクラスターを作ろう!

ということで、MPIクラスターをIDCFクラウド上に作る話を連載していきます。

MPI (Message Passing Interface) について触れるつもりはないのですが、
プロセス間のデータのやりとりの仕方です、並列計算時のノード間の通信に用いられます、
つまり、スパコンとかクラスタ型の計算機のよくある実装ですね。

詳細はウィキペディアとかどうぞ。
Message Passing Interface - Wikipedia

さて、では第1回目の本題ですが、なぜMPIクラスタ環境をIDCFクラウド上で作るのか、です。
それは多くのメリットがあるからなので紹介していきます。


1) 時間従量課金で使える
クラウドだとだいたいそうですね。メジャーどころのクラウドだと今時は秒課金ですしね。
ときどきある並列計算したいなとか、並列計算用の開発時のテストなんてのは、常に動かす必要ないので、使いたいときに使った分だけの課金は用途にピッタリです(というモチベーションでこの後の話は続いていきます)。

2) 1番安いタイプで月額500円
CPUが1コア、メモリが1GB、ディスクが15GBのマシンタイプで、1時間1円、1ヶ月だと500円。
64bit OS動かすなら最低でもメモリ1GBは欲しいけど、500円で使えるクラウドってあんまりないんだよね。

3) ディスクI/Oが速い
500円のマシンでもオールフラッシュの環境でIOPS制限なく利用できるのでI/Oはかなり速いというか、IDCFクラウドの1番のウリ。

4) ネットワークが速い
500円のマシンでも2Gbpsのネットワーク帯域に、超低レイテンシーかつ安定した内部L2ネットワーク。レイテンシーの低さはIDCFクラウドの隠れたウリの1つ。
ノード間の通信が多いとこのあたりが効いてくるけど、イーサーなのでもちろんInfinibandにはかなわないけども、自宅で安鯖を1000BASE-Tで並べるのと比べたときの優位点はココだね。

5) テンプレート化でスケールアウトが楽
1台だけMPI環境を作ってしまえば、あとはそいつをテンプレート化して複製していくだけなので、複数ノードの構築が楽です。
しかもVMware環境になっていて、テンプレートのエクスポート/インポートもできるので、手元のVMware環境と使いまわしが効く。

6) 名前解決付きのDHCP
IPアドレスDHCPで振られて、しかも作成した時の仮想マシン名でDNSホスト名も引けるので、ネットワークの設定の手間が不要です。
IPアドレスを1台づつ設定するのは不要だし、ホストファイル作るのだって仮想マシン名を並べるだけで簡単です。

7) スケールアップも
500円のマシンだと1コアなので、ノード内並列も試したいというときは一時的にマルチコアのタイプに変更ももちろんできます。
仮想マシンを起動したままリサイズするダイナミックスケールの機能もありますが、Lightタイプから他のタイプには変更できないので注意です。

8) 無料のファイアウォール
ファイアウォール配下のマシンが並ぶかたちになりますので、自分しか使わないならIPアドレスで絞ってしまえばあとは安心。
VPS環境でマシン並べるとなると手間なところが省略できます。

9) 課金アラート
マシンの消し忘れ止め忘れ使い過ぎなどあると課金額が恐いですが、メールによるアラート機能がありますので安心です。


10個くらい並べようかなと思いましたが、最後良いのが思いつかなかったのでこのままにしておきます。

ゴールは、自分専用のMPIクラスタをIDCFクラウド上に構築し、HPLなどのベンチマークコードをビルドし実行するところまでです。
それでは、次回につづく。

fujish.hateblo.jp

Aliyun Linux 17.1 リリース

前回のエントリーで Aliyun Linux 15.1 の話を書いて、次回はベンチマークだーみたいな〆だったけど、このタイミングで新版の 17.1 がリリースされてた。
ということで Aliyun Linux 17.1 も見ていこう。

まずはディストリビューションの情報を見ていきましょう。
15.1のときはalios-releaseでしたが、alinux-releaseにファイル名変わってます。

[root@<UUID> ~]# ls -al /etc/*release
-rw-r--r--. 1 root root  69  1月  5 13:52 /etc/alinux-release
lrwxrwxrwx. 1 root root  14  2月 25 17:27 /etc/centos-release -> alinux-release
-rw-r--r--. 1 root root 261  1月  5 13:52 /etc/os-release
lrwxrwxrwx. 1 root root  14  2月 25 17:27 /etc/redhat-release -> alinux-release
lrwxrwxrwx. 1 root root  14  2月 25 17:27 /etc/system-release -> alinux-release
[root@<UUID> ~]# cat /etc/alinux-release
Alibaba Cloud Enterprise Linux Server release 17.01.2 (Golden Toad) 
[root@<UUID> ~]# cat /etc/os-release
NAME="Alibaba Cloud Enterprise Linux Server"
VERSION="17.01 (Golden Toad)"
ID="alinux"
ID_LIKE="rhel fedora centos"
VERSION_ID="17.01"
PRETTY_NAME="Alibaba Cloud Enterprise Linux Server 17.01 (Golden Toad)"
ANSI_COLOR="0;31"
HOME_URL="https://www.aliyun.com/"

ここまでだと、ベースのディストロはわかんないですね。パッケージ管理はRPM/YUMですけど。
カーネルはというと

[root@<UUID> ~]# uanme -a
Linux <UUID> 4.4.24-2.al7.x86_64 #1 SMP Wed Jan 4 17:23:01 CST 2017 x86_64 x86_64 x86_64 GNU/Linux

4.4.24 あまりみないカーネルバージョンですね、というか15.1のときと比べるとかなり新し目。al7はel7を置き換えているのかな。

ビルドオプション見てみようかなとしたところで、決定的なものを見つけた。

[root@<UUID> ~]# ls -al /boot/
合計 128236
-rw-------. 1 root root  3113009 12月 26 18:37 System.map-3.10.0-514.al7.x86_64
-rw-------. 1 root root  3878401  1月  4 17:33 System.map-4.4.24-2.al7.x86_64
-rw-r--r--. 1 root root   137696 12月 26 18:37 config-3.10.0-514.al7.x86_64
-rw-r--r--. 1 root root   189804  1月  4 17:33 config-4.4.24-2.al7.x86_64
drwx------. 6 root root     4096  5月 13 21:27 grub2
-rw-------. 1 root root 50436480  2月 25 17:32 initramfs-0-rescue-76a088ac35af45869df89d5cca7196e2.img
-rw-------. 1 root root 19601274  2月 25 17:34 initramfs-3.10.0-514.al7.x86_64.img
-rw-------. 1 root root 19391661  2月 25 17:35 initramfs-4.4.24-2.al7.x86_64.img
-rw-------  1 root root 15263874  2月 25 17:36 initramfs-4.4.24-2.al7.x86_64kdump.img
-rw-r--r--. 1 root root   607608  2月 25 17:30 initrd-plymouth.img
-rw-r--r--. 1 root root   277953 12月 26 19:14 symvers-3.10.0-514.al7.x86_64.gz
-rw-r--r--. 1 root root   355700  1月  4 17:36 symvers-4.4.24-2.al7.x86_64.gz
-rwxr-xr-x. 1 root root  5395872  2月 25 17:32 vmlinuz-0-rescue-76a088ac35af45869df89d5cca7196e2
-rwxr-xr-x. 1 root root  5395872 12月 26 18:37 vmlinuz-3.10.0-514.al7.x86_64
-rwxr-xr-x. 1 root root  7041584  1月  4 17:33 vmlinuz-4.4.24-2.al7.x86_64

3.10.0-514.al7.x86_64 というカーネルも入っているじゃないか。3.10.0-514 はRHEL7.3と同じバージョン。RHEL7.3をベースに、新しいカーネル入れたといったところか。

他のパッケージのバージョンを見ると、

[root@<UUID> ~]# bash --version
GNU bash, バージョン 4.2.46(1)-release (x86_64-koji-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc.
ライセンス GPLv3+: GNU GPL バージョン 3 またはそれ以降 <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
[root@<UUID> ~]# gcc -v
組み込み spec を使用しています。
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/4.8.5/lto-wrapper
ターゲット: x86_64-redhat-linux
configure 設定: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,objc,obj-c++,java,fortran,ada,go,lto --enable-plugin --enable-initfini-array --disable-libgcj --with-isl=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/isl-install --with-cloog=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/cloog-install --enable-gnu-indirect-function --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux
スレッドモデル: posix
gcc バージョン 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) 
[root@<UUID> ~]# httpd -v
Server version: Apache/2.4.6 (ALinux)
Server built:   Dec 29 2016 14:24:38
[root@<UUID> ~]# mysql --version
mysql  Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using readline 5.1
[root@<UUID> ~]# php -v
PHP 5.4.16 (cli) (built: Dec 26 2016 18:24:24) 
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
[root@<UUID> ~]# python -V
Python 2.7.5

ということで、他のバージョンはRHEL7.3収録と同じバージョンなので、RHEL7.3ベースということですね。

Alibaba Cloud の Aliyun Linux

jp.aliyun.com
昨年後半、Alibaba Cloudの日本リージョンがリリースされ、中の人からの紹介だったり、2万円クーポンキャンペーンをしてたりするので、今触っていたりします。

すると、インスタンスの作成時のOSに、Aliyun Linuxというのが選べました。
f:id:fujish:20170416224419p:plain

Aliyunとは、Alibabaのクラウドコンピューティングサービス名称の阿里雲のアルファベット表記。
AWSで言う、Amazon Linuxみたいなものですかね。自社で開発した自社で使ってるLinuxみたいな。
ググッてもあまり情報がなかったので中見てみました。どこのディストロベースかなー。

上記画像のとおり、選べるバージョンは15.1のみ。64bitと32bitが選べます。以下、64bitで作成しました。

OS上でのディストリビューション名を確認します。

[root@<UUID> ~]# ls -al /etc/*release
-rw-r--r--. 1 root root   28 Jan  6  2015 /etc/alios-release
lrwxrwxrwx. 1 root root   13 Mar 25  2015 /etc/system-release -> alios-release

/etc/system-releaseは用意されてるんですね。でも/etc/lsb-releaseは無しと。
ちょっと古そうな印象。

[root@<UUID> ~]# cat /etc/alios-release
Aliyun Linux release6 15.01

なるほど、release6の15.01と。

次にカーネルを見てみると。

[root@<UUID> ~]# uname -a
Linux <ホスト名:UUID> 2.6.32-220.23.2.al.ali1.1.alios6.x86_64 #1 SMP Sun Jan 4 15:01:53 CST 2015 x86_64 x86_64 x86_64 GNU/Linux

2.6.32-220か、となるとRHEL6.2と同じ。

パッケージ管理は、YUMRPM
リポジトリは自分とこ向いてる。

[root@<UUID> ~]# cat /etc/yum.repos.d/aliyunlinux-Base-Aliyun.repo
[base]
name=aliyunlinux-$releasever
enabled=1
failovermethod=priority
baseurl=http://jp.mirrors.cloud.aliyuncs.com/aliyunlinux/$releasever/os/$basearch/
(以下略)

その他、バージョンを見ていくと、

[root@<UUID> ~]# bash --version
GNU bash, version 4.1.2(1)-release (x86_64-koji-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
[root@<UUID> ~]# gcc -v
Using built-in specs.
Target: x86_64-alios-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bbs.aliyun.com --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre --enable-libgcj-multifile --enable-java-maintainer-mode --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libjava-multilib --with-ppl --with-cloog --with-tune=generic --with-arch_32=i686 --build=x86_64-alios-linux
Thread model: posix
gcc version 4.4.6 20110731 (AliCloud Linux 4.4.6-3) (GCC)
[root@<UUID> ~]# httpd -v
Server version: Apache/2.2.15 (Unix)
Server built:   Jul 26 2014 06:52:25
[root@<UUID> ~]# mysql --version
mysql  Ver 14.14 Distrib 5.1.73, for koji-linux-gnu (x86_64) using readline 5.1
[root@<UUID> ~]# php -v
PHP 5.3.3 (cli) (built: Jul 28 2014 21:21:24)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

といったところで、bashは4.1.2、gccは4.4.6、httpdは2.2.15、MySQLは5.1.73、PHPは5.3.3。
これはもうRHEL6系ベースですね。て言うかバージョン古い。

ここまでこれといった、独自の拡張みたいなのがなく、NICとかストレージコントローラとかのデバイスが特殊かなと思ってても、いずれもKVMのvirtioで普通。

となると、カーネルかなと。CentOS6.2とカーネルビルドオプションを比較してみると、以下がAlibaba Linuxに追加されてました。

< CONFIG_IKCONFIG=y
< CONFIG_IKCONFIG_PROC=y
< CONFIG_HOOKERS=m
< CONFIG_MODULE_SIG_FORCE=y
< CONFIG_TOA=m
< CONFIG_RT_STAT=m
< CONFIG_IP_VS_TAB_BITS=20
< CONFIG_BLK_DEV_DRBD=m
< CONFIG_DRBD_TRACE=m
< CONFIG_TLOCK=m
< CONFIG_BLK_DEV_SD=y
< CONFIG_DM_FLASHCACHE=m
< CONFIG_NETOOPS=y
< CONFIG_NETPOLL_TARGETS=y
< CONFIG_NETPOLL_TARGETS_DYNAMIC=y
< CONFIG_EXT3_FS_SUBTREE=y
< CONFIG_SUBTREE=y
< CONFIG_OVERLAYFS_FS=m
< CONFIG_CONFIGFS_FS=y
< CONFIG_ACRIDAFS=m
< CONFIG_PRINTK_TIME=y
< CONFIG_UNUSED_SYMBOLS=y
< CONFIG_GTP=m
< CONFIG_PAGE_CACHE_ACCT=y
< CONFIG_DETECT_KERNEL_VUL=y
< CONFIG_CRC_T10DIF=y

これを見ていくと、Alibabaが作ったパッチが適用されていて、そこを追ってたらそのまんま核心を見つけた。

github.com

All features of RHEL6U2 kernel, source code version is 2.6.32-220.23.1.

やはり、RHEL6.2ベースでした。Alibabaが自分たちで使っているようです。
安定がウリのようですが、とは言え、バージョンも古いですしね。
次回は性能面を見ていきましょう。

NUROが開通したのでベンチマークしてみた話

これまで自宅のインターネット回線は、フレッツ 光ネクスト ギガマンション・スマートタイプという1Gbpsの回線にISPは、Yahoo!BBIPv6 IPoE+IPv4 で繋いでいましたが、ウチのマンションにもNUROが来たので、フレッツに加え追加契約しました。
NURO光 for マンションという2Gbpsの回線です。


ということで、速度を見ていきましょう。まずは簡単に以下のベンチマークサイト
fast.com
で見てみます。3回実行しました。

# フレッツ NURO
1 450 Mbps 720 Mbps
2 350 Mbps 740 Mbps
3 400 Mbps 740 Mbps

やはりNUROで速くなりました。倍近く違います。調子がいいと800Mbps以上でることもあります。


次に、もう少し大きいデータのダウンロードで試してみます。
IDCFクラウド上でnginxのサーバーをたて(Standard.L16)、CentOS-6.7のisoファイル(3.6GByte)を置きます。ここに対してクライアントからはpgetを使ってダウンロードします。ディスクI/Oがボトルネックにならないよう、ファイルはメモリ上に読み書きしてます。

ちなみに、wgetだと帯域を使いきれないので、pgetを4並列で使っています。
qiita.com
具体的には、

user@localhost:/dev/shm/tmp$ pget -p 4 http://<IPアドレス>/CentOS-6.7-x86_64-bin-DVD1.iso
Checking now http://<IPアドレス>/CentOS-6.7-x86_64-bin-DVD1.iso
Download start from http://<IPアドレス>/CentOS-6.7-x86_64-bin-DVD1.iso
 3895459840 / 3895459840 [=========================================] 100.00% 34s

binding with files...
 3895459840 / 3895459840 [==========================================] 100.00% 1s
Complete

ここでは、Downloadにかかった時間(34s)で比べたいと思います。

# フレッツ NURO
1 123 sec 36 sec
2 137 sec 37 sec
3 130 sec 34 sec

4倍近い差がでました。900Mbps以上出ている計算ですね。クライアントのPCもその上のNUROのルータも1Gbpsのポートなので、このあたりでボトルネックになっていると思われます。


定評のとおり、NUROでは良い結果が出ましたので、メインの回線はNUROに切り替えました。
NURO 10Gのマンションタイプが待ち遠しい。

IDCFクラウドの仮想マシンでMACアドレスを変えたいときに

IDCF Cloud Advent Calendar 2016 の12/14が埋まってないので個人的に責任(疲)をとって埋めておきますね。

突然ですが、サーバーのMACアドレスを変えたいときってありますよね!?

ないかもしれませんが、例えば、
IDCFの旧セルフクラウドからIDCFクラウドに移行するときにMACアドレスを変えたくない(ライセンス的に)とか・・・。

ちゃんとした話するなら、IDCFクラウドの特徴として、VRRPを使ったVirtual IP (VIP)が使えるので、VIPと合わせてMACアドレスも変えるとか。

Linuxなら簡単にできるので紹介します。

例えば、こんなNICがあったとします。

[root@test ~]# ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 02:00:4e:43:00:46 brd ff:ff:ff:ff:ff:ff
    inet 10.21.0.84/21 brd 10.21.7.255 scope global eth0
    inet6 fe80::4eff:fe43:46/64 scope link 
       valid_lft forever preferred_lft forever

この時点でeth0のMACアドレスは 02:00:4e:43:00:46 ですね。
これを aa:bb:cc:dd:ee:ff に変えます。

[root@test ~]# ip link set eth0 address aa:bb:cc:dd:ee:ff
[root@test ~]# ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether aa:bb:cc:dd:ee:ff brd ff:ff:ff:ff:ff:ff
    inet 10.21.0.84/21 brd 10.21.7.255 scope global eth0
    inet6 fe80::4eff:fe43:46/64 scope link 
       valid_lft forever preferred_lft forever

この通り、eth0のMACアドレスが aa:bb:cc:dd:ee:ff に変わりました。

念の為、別のサーバーから疎通を確認しましょう。

[root@test2 ~]# ping 10.21.0.84
PING 10.21.0.84 (10.21.0.84) 56(84) bytes of data.
64 bytes from 10.21.0.84: icmp_seq=1 ttl=64 time=2.00 ms
64 bytes from 10.21.0.84: icmp_seq=2 ttl=64 time=0.249 ms
64 bytes from 10.21.0.84: icmp_seq=3 ttl=64 time=0.224 ms
〜略〜
[root@test2 ~]# arp -an
? (10.21.0.84) at aa:bb:cc:dd:ee:ff [ether] on eth0

pingが通ること、ARPテーブル上も書き換えたMACアドレスになっていることが確認できます。

以上のとおり、MACアドレス書き換えはOS上でさらりと設定できました。
ただ、クラウドの基盤側のセキュリティポリシーにも依存しそうな話なので、利用する前にしっかり事前試験はしてください。
もしクリティカルな場面で使用したいのであれば、サポートに聞いてみることをおすすめします。