19.3. Sử dụng Máy ảo AWS EC2

Trong phần này, chúng tôi sẽ hướng dẫn bạn cách cài đặt tất cả các thư viện trên một máy Linux sơ khai. Ghi nhớ rằng trong Section 19.2, ta đã thảo luận về cách sử dụng Amazon SageMaker, trong khi việc bạn tự xây dựng một máy ảo sẽ tốn ít chi phí hơn với AWS. Hướng dẫn bao gồm một số bước:

  1. Yêu cầu một máy ảo Linux GPU từ AWS EC2.
  2. Tùy chọn: cài đặt CUDA hoặc sử dụng AMI có cài đặt sẵn CUDA.
  3. Thiết lập phiên bản MXNet tương ứng cho GPU.

Quá trình này cũng áp dụng cho các máy ảo khác (và các dịch vụ đám mây khác ngoài AWS), với một số chỉnh sửa nhỏ. Trước khi tiếp tục, bạn cần tạo một tài khoản AWS, tham khảo Section 19.2 để biết thêm chi tiết.

19.3.1. Khởi tạo và Chạy Một Máy ảo EC2

Sau khi đăng nhập vào tài khoản AWS của bạn, hãy nhấp vào “EC2” (được đánh dấu bằng khung màu đỏ trong Fig. 19.3.1) để chuyển đến bảng điều khiển EC2.

../_images/aws.png

Fig. 19.3.1 Mở bảng điều khiển EC2.

Fig. 19.3.2 hiển thị bảng điều khiển EC2 với thông tin tài khoản nhạy cảm được che đi.

../_images/ec2.png

Fig. 19.3.2 Bảng điều khiển EC2.

19.3.1.1. Thiếp lập trước Vị trí Địa lý

Lựa chọn một trung tâm dữ liệu gần bạn để giảm độ trễ, ví dụ ở đây là “Oregon” (được đánh dấu bằng ô màu đỏ ở trên cùng bên phải trong Fig. 19.3.2). Nếu bạn ở Việt Nam, bạn có thể chọn một khu vực Châu Á Thái Bình Dương gần đó, chẳng hạn như Singapore, Seoul hoặc Tokyo. Xin lưu ý rằng một số trung tâm dữ liệu có thể không có máy ảo GPU.

19.3.1.2. Tăng Giới hạn

Trước khi chọn một máy ảo, hãy kiểm tra xem liệu AWS có hạn chế số lượng máy ảo đó không bằng cách nhấp vào nhãn “Limits” trong thanh bên trái như trong Fig. 19.3.2. Fig. 19.3.3 minh họa ví dụ về giới hạn như vậy. Tài khoản hiện thời không thể mở máy ảo “p2.xlarge” trong khu vực đó. Nếu bạn cần mở một hoặc nhiều máy ảo, hãy nhấp vào “Request limit increase” để đăng ký số lượng máy ảo cao hơn. Nói chung, sẽ mất một ngày làm việc để xử lý đơn đăng ký.

../_images/limits.png

Fig. 19.3.3 Hạn chế số lượng máy ảo.

19.3.1.3. Khởi động Máy ảo

Tiếp theo, nhấp vào nút “Launch Instance” được đánh dấu bởi khung đỏ trong Fig. 19.3.2 để khởi động máy ảo của bạn.

Ta bắt đầu bằng việc chọn một AMI (AWS Machine Image) phù hợp. Nhập “Ubuntu” vào ô tìm kiếm (đánh dấu bởi khung đỏ trong Fig. 19.3.4).

../_images/ubuntu-new.png

Fig. 19.3.4 Chọn hệ điều hành.

EC2 cung cấp rất nhiều cấu hình máy ảo khác nhau để bạn có thể lựa chọn. Việc này đôi lúc khiến cho người mới bắt đầu cảm thấy chóang ngợp. Ở đây là bảng liệt kê các máy phù hợp:

Tên GPU Ghi chú
g2 Grid K520 cũ kỹ
p2 Kepler K80 cũ nhưng thường rẻ như máy ảo spot
g3 Maxwell M60 cân bằng tốt
p3 Volta V100 hiệu năng cao cho FP16
g4 Turing T4 tối ưu suy luận cho FP16/INT8

Tất cả các máy chủ trên đều đa dạng về số lượng GPU được sử dụng. Ví dụ, một máy chủ p2.xlarge có 1 GPU và p2.16xlarge có 16 GPU và nhiều bộ nhớ hơn. Để biết thêm chi tiết, tham khảo tài liệu về AWS EC2 hoặc trang tổng hợp. Nhằm mục đích minh họa, một máy chủ p2.xlarge là đủ (đánh dấu bởi khung đỏ trong Fig. 19.3.5).

Lưu ý: bạn phải sử dụng một máy chủ có kích hoạt GPU với trình điều khiển (driver) phù hợp cùng với phiên bản MXNet có kích hoạt GPU. Nếu không, bạn sẽ không thấy được bất cứ khác biệt nào từ việc sử dụng GPU.

../_images/p2x.png

Fig. 19.3.5 Chọn một máy ảo.

Đến đây, chúng ta đã hoàn thành hai trong bảy bước để khởi động một máy ảo EC2, như minh họa trong Fig. 19.3.6. Trong ví dụ này, ta giữ nguyên cấu hình mặc định trong bước “3. Configure Instance”, “5. Add Tags”, và “6. Configure Security Group”.

../_images/disk.png

Fig. 19.3.6 Điều chỉnh kích thước ổ cứng của máy ảo.

Cuối cùng, đi tới bước “7. Review” và nhấp “Launch” để khởi động một máy ảo đã được cấu hình. Lúc này hệ thống sẽ nhắc bạn lựa chọn một cặp khóa để truy cập vào máy ảo. Nếu bạn không có cặp khóa nào, chọn “Create a new key pair” ở đầu bảng chọn trong Fig. 19.3.7 để tạo một cặp khóa mới. Tiếp theo, bạn có thể chọn “Choose an existing key pair” trong menu này và sau đó chọn cặp khóa vừa được tạo. Nhấp “Launch Instances” để khởi động máy ảo vừa tạo.

../_images/keypair.png

Fig. 19.3.7 Chọn một cặp khóa.

Đảm bảo rằng bạn sẽ tải cặp khóa về và lưu nó ở một thư mục an toàn nếu bạn tạo một cặp khóa mới. Đây là cách duy nhất để SSH vào máy chủ. Nhấp vào ID máy ảo như minh họa trong Fig. 19.3.8 để quan sát trạng thái của máy ảo này.

../_images/launching.png

Fig. 19.3.8 Nhấp vào ID máy ảo.

19.3.1.4. Kết nối tới Máy ảo

Như minh họa trong Fig. 19.3.9, sau khi trạng thái máy ảo chuyển sang màu xanh, hãy nhấp chuột phải vào máy ảo và chọn Connect để quan sát phương thức truy cập máy ảo.

../_images/connect.png

Fig. 19.3.9 Quan sát phương thức truy cập và khởi động máy ảo.

Nếu đây là một khóa mới, nó không thể xem được một cách công khai để SSH có thể hoạt động. Đi đến thư mục mà bạn lưu khóa D2L_key.pem (ví dụ như thư mục Downloads) và đảm bảo rằng khóa này không thể xem được một cách công khai.

cd /Downloads  ## if D2L_key.pem is stored in Downloads folder
chmod 400 D2L_key.pem
../_images/chmod.png

Fig. 19.3.10 Quan sát phương thức truy cập và khởi động máy ảo.

Giờ hãy sao chép lệnh ssh trong khung đỏ phía dưới trong Fig. 19.3.10 và dán vào cửa sổ dòng lệnh:

ssh -i "D2L_key.pem" [email protected]

Khi cửa sổ dòng lệnh thông báo “Are you sure you want to continue connecting (yes/no)”, nhập “yes” và nhấp Enter để đăng nhập vào máy ảo.

Lúc này máy chủ của bạn đã sẵn sàng.

19.3.2. Cài đặt CUDA

Trước khi cài đặt CUDA, đừng quên cập nhật máy ảo với các trình điều khiển (driver) mới nhất.

sudo apt-get update && sudo apt-get install -y build-essential git libgfortran3

Ở đây ta tải về CUDA 10.1. Truy cập trang chứa chính thức của NVIDIA để tìm đường dẫn tải về của CUDA 10.1 như minh họa trong Fig. 19.3.11.

../_images/cuda101.png

Fig. 19.3.11 Tìm địa chỉ tải về của CUDA 10.1.

Sao chép các lệnh và dán vào cửa sổ dòng lệnh để cài đặt CUDA 10.1.

## Paste the copied link from CUDA website
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin
sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget http://developer.download.nvidia.com/compute/cuda/10.1/Prod/local_installers/cuda-repo-ubuntu1804-10-1-local-10.1.243-418.87.00_1.0-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1804-10-1-local-10.1.243-418.87.00_1.0-1_amd64.deb
sudo apt-key add /var/cuda-repo-10-1-local-10.1.243-418.87.00/7fa2af80.pub
sudo apt-get update
sudo apt-get -y install cuda

Sau khi cài đặt chương trình xong, chạy lệnh sau để xem các GPU.

nvidia-smi

Cuối cùng, thêm CUDA vào đường dẫn thư viện để giúp các thư viện khác tìm được nó.

echo "export LD_LIBRARY_PATH=\${LD_LIBRARY_PATH}:/usr/local/cuda/lib64" >> ~/.bashrc

19.3.3. Cài đặt MXNet và Tải Notebook của D2L

Đầu tiên, để đơn giản hóa quá trình cài đặt, bạn cần cài đặt Miniconda cho Linux. Đường dẫn tải về và tên tệp có thể thay đổi, vậy nên vui lòng truy cập trang web Miniconda và chọn “Copy Link Address” như minh họa trong Fig. 19.3.12.

../_images/miniconda.png

Fig. 19.3.12 Tải Miniconda.

# The link and file name are subject to changes
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
sh Miniconda3-latest-Linux-x86_64.sh -b

Sau khi cài đặt Miniconda xong, chạy lệnh sau để kích hoạt CUDA và conda.

~/miniconda3/bin/conda init
source ~/.bashrc

Tiếp theo, hãy tải về mã nguồn của cuốn sách này.

sudo apt-get install unzip
mkdir d2l-en && cd d2l-en
curl https://d2l.ai/d2l-en.zip -o d2l-en.zip
unzip d2l-en.zip && rm d2l-en.zip

Sau đó tạo một môi trường conda d2l và nhập y để tiến hành cài đặt.

conda create --name d2l -y

Sau khi tạo môi trường d2l, kích hoạt nó và cài đặt pip.

conda activate d2l
conda install python=3.7 pip -y

Cuối cùng, cài đặt MXNet và gói thư viện d2l. Hậu tố cu101 nghĩa là đây là phiên bản sử dụng CUDA 10.1. Với các phiên bản khác, giả sử như CUDA 10.0, bạn sẽ thay bằng cu100.

pip install mxnet-cu101==1.7.0
pip install git+https://github.com/d2l-ai/d2l-en

Bạn có thể nhanh chóng kiểm tra mọi thứ đã hoạt động bằng cách:

$ python
>>> from mxnet import np, npx
>>> np.zeros((1024, 1024), ctx=npx.gpu())

19.3.4. Chạy Jupyter

Để chạy Jupyter từ xa bạn cần sử dụng phương thức chuyển tiếp cổng SSH. Suy cho cùng thì máy chủ trên đám mây không có màn hình hay bàn phím. Để thực hiện việc này, hãy truy cập vào máy chủ của bạn từ máy tính bàn (hay laptop) như sau.

# This command must be run in the local command line
ssh -i "/path/to/key.pem" ubuntu@ec2-xx-xxx-xxx-xxx.y.compute.amazonaws.com -L 8889:localhost:8888
conda activate d2l
jupyter notebook

Fig. 19.3.13 cho ta thấy kết quả khả dĩ sau khi bạn chạy Jupyter Notebook. Dòng cuối cùng là URL của cổng 8888.

../_images/jupyter.png

Fig. 19.3.13 Kết quả sau khi chạy Jupyter Notebook. Dòng cuối cùng là URL của cổng 8888.

Do sử dụng phương thức chuyển tiếp cổng cho cổng 8889, bạn cần phải đổi địa chỉ cổng 8888 thành 8889 và sử dụng token được sinh bởi Jupyter để mở URL trên trình duyệt web trong máy của bạn.

19.3.5. Đóng Máy ảo Không Dùng đến

Do dịch vụ đám mây tính phí theo thời gian sử dụng, bạn nên đóng những máy ảo hiện không sử dụng đến. Lưu ý rằng có các giải pháp thay thế khác: “Stop” một máy ảo nghĩa là bạn có thể khởi động nó lại được. Việc này khá giống với việc tắt nguồn máy chủ thông thường của bạn. Tuy nhiên, việc dừng một máy chủ vẫn sẽ tính một lượng nhỏ vào hóa đơn cho kích thước ổ cứng được giữ lại. Lựa chọn “Terminate” một máy ảo sẽ xoá toàn bộ dữ liệu liên quan đến nó. Dữ liệu này bao gồm cả ổ cứng, vậy nên bạn sẽ không thể khởi động nó lại được. Chỉ thực hiện thao tác này nếu bạn chắc rằng bạn sẽ không cần đến nó trong tương lai.

Nếu bạn muốn sử dụng máy ảo làm khuôn mẫu (template) cho nhiều máy ảo khác, hãy nhấp chuột phải vào ví dụ trong Fig. 19.3.9 và chọn “Image” \(\rightarrow\) “Create” để tạo một ảnh (image) của máy ảo này. Sau khi hoàn thành thao tác này, chọn “Instance State” \(\rightarrow\) “Terminate” để xóa máy ảo này. Lần tiếp theo bạn muốn sử dụng máy ảo này, bạn có thể thực hiện theo các bước khởi tạo và chạy một máy ảo EC2 như minh họa trong phần này để tạo một máy ảo dựa trên ảnh đã lưu. Điểm khác biệt duy nhất nằm ở bước “1. Choose AMI” như trong Fig. 19.3.4, bạn phải chọn mục “My AMIs” phía bên trái để lựa chọn ảnh bạn đã lưu. Máy ảo được tạo ra sẽ giữ lại thông tin được lưu trên ảnh đĩa cứng. Ví dụ, bạn sẽ không cần phải cài đặt lại CUDA và các môi trường thời gian chạy khác.

19.3.6. Tóm tắt

  • Bạn có thể khởi động và dừng các máy ảo tuỳ theo nhu cầu mà không cần phải mua và xây dựng máy tính riêng.
  • Bạn cần phải cài đặt trình điều khiển GPU phù hợp trước khi sử dụng chúng.

19.3.7. Bài tập

  1. Dịch vụ đám mây cung cấp sự thuận tiện, nhưng nó không hề rẻ. Tìm hiểu cách khởi động máy ảo spot để tìm hiểu cách giảm chi phí.
  2. Thử nghiệm với nhiều máy chủ GPU khác nhau. Chúng nhanh đến mức nào?
  3. Thử nghiệm với máy chủ đa GPU. Việc mở rộng giúp hoàn thành công việc tốt đến thế nào?

19.3.8. Thảo luận

19.3.9. Những người thực hiện

Bản dịch trong trang này được thực hiện bởi:

  • Đoàn Võ Duy Thanh
  • Nguyễn Văn Quang
  • Phạm Hồng Vinh
  • Nguyễn Mai Hoàng Long
  • Đỗ Trường Giang
  • Nguyễn Văn Cường