Câu hỏi: AID301c - Phần 5: Triển khai mô hình trong doanh nghiệp
25 câu trắc nghiệm kèm lời giải của môn AID301c - Thiết kế sản phẩm TTNT, xếp theo thứ tự nhập vào ngân hàng.
Danh sách câu hỏi
20/25 câuCòn 5
AIt specifies the script's name
BIt indicates the script is written in Python
CIt tells the system to use the Bash shell to execute the script
DIt is a comment and has no effect
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "It tells the system to use the Bash shell to execute the script". Dòng đầu tệp gồm dấu thăng, dấu chấm than rồi đường dẫn /bin/bash gọi là shebang (dòng chỉ định trình thông dịch): khi tệp được chạy trực tiếp như một chương trình, hệ điều hành nhận ra cặp ký tự mở đầu đó rồi giao toàn bộ nội dung tệp cho chương trình nằm ở đường dẫn phía sau, ở đây là Bash, để thực thi các lệnh như spark-submit. Phương án "It specifies the script's name" sai vì tên script là tên tệp trên đĩa, shebang không khai báo tên nào. Phương án "It indicates the script is written in Python" sai vì muốn chạy bằng Python thì shebang phải trỏ tới trình thông dịch Python, còn /bin/bash là shell. Phương án "It is a comment and has no effect" chỉ đúng một nửa: với chính Bash, dòng bắt đầu bằng dấu thăng được bỏ qua khi đọc, nhưng với hệ điều hành dòng này có tác dụng thật vì quyết định chương trình nào chạy tệp, nên không thể nói nó vô tác dụng.
AThe explicit training vs implicit training comparison
BThe lambda or regularization parameter
CThe epsilon or scale parameter
DThe l1 vs l2 comparison
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "The lambda or regularization parameter". Trong ALS (Alternating Least Squares, bình phương tối thiểu luân phiên) dùng cho hệ gợi ý, ma trận đánh giá được phân rã thành ma trận nhân tố người dùng và ma trận nhân tố sản phẩm; tham số lambda (regularization, chính quy hoá) phạt độ lớn của các nhân tố để chống quá khớp trên dữ liệu rất thưa, nên khi dò siêu tham số trong bài tình huống triển khai mô hình, thay đổi lambda làm sai số trên tập kiểm tra biến động rõ nhất. "The explicit training vs implicit training comparison" sai vì chọn phản hồi tường minh hay ngầm định là chọn kiểu dữ liệu đầu vào cho đúng bài toán, không phải tinh chỉnh mang lại khác biệt lớn nhất. "The epsilon or scale parameter" sai vì ALS không có tham số epsilon hay scale đóng vai trò chính; tham số gần nhất là alpha chỉ dùng ở chế độ implicit. "The l1 vs l2 comparison" sai vì ALS chuẩn dùng chính quy hoá kiểu L2 trên các nhân tố, không có lựa chọn chuyển sang L1 để so sánh.
Atmpfs mount
Buse a named pipe
Cbind mounts
DGitHub
Evolumes
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "bind mounts". Bind mount (gắn thư mục máy chủ vào container) ánh xạ trực tiếp một thư mục có sẵn trên máy host, ví dụ thư mục dự án chứa notebook và script, vào một đường dẫn bên trong container bằng tùy chọn -v hoặc --mount khi chạy docker run; sửa tệp ở bên nào thì bên kia thấy ngay, rất hợp cho vòng lặp phát triển. "volumes" là vùng lưu trữ do Docker tự tạo và quản lý trong khu vực riêng của nó, phù hợp để giữ dữ liệu bền vững như dữ liệu cơ sở dữ liệu, nhưng không trỏ thẳng tới tệp mã nguồn bạn đang có trên máy. "tmpfs mount" chỉ cấp vùng nhớ tạm trong RAM và mất sạch khi container dừng. "use a named pipe" là kênh truyền dữ liệu giữa các tiến trình, không phải cách chia sẻ thư mục. "GitHub" là nơi lưu mã từ xa; kéo mã về không phải cơ chế để container truy cập tệp trên máy host.
Adocker-io
Bdocker-ce
Cdocker-compose
Ddocker-toolbox
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "docker-ce". Docker Engine có bản cộng đồng miễn phí, mã nguồn mở gọi là Docker Community Edition, và tên gói cài đặt của nó là docker-ce, phân biệt với bản doanh nghiệp từng mang tên docker-ee. "docker-io" gợi tới gói docker.io do kho phần mềm của các bản phân phối như Debian, Ubuntu tự đóng gói lại, không phải gói cộng đồng chính thức do Docker phát hành. "docker-compose" là công cụ định nghĩa và chạy ứng dụng nhiều container bằng tệp YAML, chạy bên trên Engine chứ không phải bản thân Engine. "docker-toolbox" là bộ cài cũ cho Windows và macOS đời trước, dùng máy ảo VirtualBox để chạy Docker, nay đã được Docker Desktop thay thế.
5Which of the following is a common challenge when optimizing code for machine learning models?4 lựa chọn
ALack of available data
BDifficulty in improving training time for large models
CInability to use multiple GPUs
DLimited programming languages available
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Difficulty in improving training time for large models". Khi tối ưu mã cho học máy, khó khăn thường gặp là thời gian huấn luyện tăng rất nhanh theo kích thước mô hình và dữ liệu, nên phải tìm cách tăng tốc như vector hoá, song song hoá, dùng GPU, giảm độ chính xác số học hay tối ưu đường ống nạp dữ liệu, và mỗi cải thiện thường khó đạt được. Phương án "Lack of available data" là vấn đề về dữ liệu, thuộc giai đoạn thu thập, không phải thách thức của việc tối ưu mã. Phương án "Inability to use multiple GPUs" không đúng vì các thư viện hiện nay như TensorFlow và PyTorch đều hỗ trợ huấn luyện phân tán trên nhiều GPU; cái khó là dùng chúng hiệu quả chứ không phải không dùng được. Phương án "Limited programming languages available" sai vì học máy có nhiều ngôn ngữ và thư viện để chọn như Python, R, Julia, C++ và Scala.
AIn your pipeline use variance thresholding to limit the number of features
BUse the Shuffle and split form of cross-validation
CUse a randomized grid search form of cross validation
DRandomly subset the data
EUse PCA to reduce the dimensionality of the data before training
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Use the Shuffle and split form of cross-validation". Thời gian grid search (dò lưới siêu tham số) phụ thuộc vào số tổ hợp tham số, số lần chia kiểm định chéo và kích thước dữ liệu mỗi lần huấn luyện. ShuffleSplit chỉ đổi cách xáo trộn và chia tập huấn luyện với tập kiểm định, không giảm số đặc trưng, số mẫu hay số tổ hợp, nên ít khả năng tăng tốc nhất. "In your pipeline use variance thresholding to limit the number of features" bỏ các đặc trưng gần như không đổi, giảm chi phí tính toán. "Use a randomized grid search form of cross validation" chỉ thử một số tổ hợp ngẫu nhiên thay vì toàn bộ lưới nên nhanh hơn rõ rệt. "Randomly subset the data" huấn luyện trên ít mẫu hơn nên mỗi lần khớp mô hình rẻ hơn. "Use PCA to reduce the dimensionality of the data before training" nén dữ liệu xuống ít chiều hơn, giảm thời gian huấn luyện trên dữ liệu nhiều đặc trưng.
Athreading
Bsubprocess
Cmultiprocessing
Dnumpy
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "multiprocessing". Gói multiprocessing trong thư viện chuẩn Python tạo các tiến trình (process) riêng, mỗi tiến trình có trình thông dịch và bộ nhớ riêng, nên vượt qua được GIL (Global Interpreter Lock, khóa chỉ cho một luồng chạy mã Python tại một thời điểm) và tận dụng nhiều lõi CPU, ví dụ dùng Pool để chạy một hàm song song trên nhiều phần dữ liệu. "threading" tạo luồng (thread) trong cùng một tiến trình chứ không sinh tiến trình, và vì GIL nên nó ít tăng tốc cho tác vụ nặng tính toán, chủ yếu có ích với tác vụ chờ vào ra. "subprocess" đúng là sinh tiến trình, nhưng mục đích là chạy chương trình hay lệnh bên ngoài và đọc kết quả, không phải chia việc tính toán của mã Python ra nhiều lõi để tối ưu. "numpy" tăng tốc bằng phép toán vector hóa viết bằng C trên mảng, không phải công cụ sinh tiến trình.
ATo write new algorithms from scratch
BTo identify which parts of the code are bottlenecks
CTo increase the number of processor cores
DTo reduce the amount of data used
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "To identify which parts of the code are bottlenecks". Profiling (đo hồ sơ thực thi) là chạy chương trình dưới một công cụ đo như cProfile hay line_profiler để biết hàm hoặc dòng nào chiếm nhiều thời gian và bộ nhớ nhất, từ đó tối ưu đúng chỗ thay vì đoán; nguyên tắc là đo trước rồi mới sửa, vì phần lớn thời gian chạy thường dồn vào một phần nhỏ của mã. "To write new algorithms from scratch" sai vì profiling chỉ chỉ ra chỗ chậm, còn viết lại thuật toán là bước có thể làm sau đó và không phải lúc nào cũng cần. "To increase the number of processor cores" sai vì số nhân là phần cứng; profiling có thể gợi ý nên song song hoá nhưng không thay đổi tài nguyên máy. "To reduce the amount of data used" sai vì giảm dữ liệu là một chiến lược tối ưu khác, còn profiling giữ nguyên đầu vào để đo hành vi của mã.
ATrue
BFalse
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "True". Docker image (ảnh Docker) là bản mẫu chỉ đọc gồm hệ điều hành tối giản, thư viện và mã ứng dụng; container là một phiên bản đang chạy được tạo ra từ image đó. Quy trình mô tả trong câu là đúng: lệnh docker pull tải image từ registry (kho chứa image, như Docker Hub) về máy, rồi docker run yêu cầu Docker client tạo và chạy container dựa trên image ấy. Trên Docker Hub cũng có cả image chính thức (official image) do Docker và nhà phát triển phần mềm duy trì, như python hay ubuntu, lẫn rất nhiều image do người dùng tự xây và đẩy lên. Chọn "False" là sai, vì mọi vế trong phát biểu, từ vai trò làm nền của image, thao tác kéo và chạy, đến sự tồn tại song song của image chính thức và image người dùng, đều khớp với cách Docker hoạt động.
AThe amount of memory allocated to the driver
BThe amount of memory allocated to each executor
CThe total memory for the Spark application
DThe memory required for the script
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "The amount of memory allocated to each executor". Trong Spark, driver là tiến trình điều phối chạy hàm main và lập kế hoạch công việc, còn executor là các tiến trình trên những nút làm việc thực thi task và giữ dữ liệu cache. Tùy chọn --executor-memory của spark-submit đặt lượng bộ nhớ heap cho mỗi executor, ví dụ 4g nghĩa là từng executor được 4 GB. "The amount of memory allocated to the driver" là vai trò của tùy chọn khác, --driver-memory. "The total memory for the Spark application" sai vì tổng bộ nhớ phụ thuộc vào số executor nhân với bộ nhớ mỗi executor cộng phần của driver, không có một tham số này đặt trọn. "The memory required for the script" sai vì Spark không cấp bộ nhớ theo tệp script; mã được phân tán ra các executor và bộ nhớ được cấp theo tiến trình.
ATrue
BFalse
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "False". Thêm GPU hay tài nguyên tính toán chỉ rút ngắn được phần công việc có thể song song hóa. Theo định luật Amdahl, phần việc buộc phải chạy tuần tự, như nạp và tiền xử lý dữ liệu, đồng bộ trọng số giữa các thiết bị hay ghi checkpoint, đặt ra giới hạn dưới cho thời gian huấn luyện. Thêm nữa, càng nhiều GPU thì chi phí giao tiếp giữa chúng càng lớn, batch quá to có thể làm mô hình hội tụ kém đi, và nút thắt có thể chuyển sang băng thông đọc dữ liệu hoặc mạng. Vì vậy đến một mức nào đó thời gian huấn luyện gần như chững lại, thậm chí tăng lên. Phát biểu "True" sai ở chữ always: lợi ích của việc thêm tài nguyên giảm dần chứ không kéo dài mãi.
12What is Port Forwarding in Docker?4 lựa chọn
AThe process of creating a data file on the local computer that persists after the container is closed
BSending one container to multiple nodes on a multicloud environment
CAllowing data to be passed in and out of a docker container and controlling which applications can do this
DBuilding one Docker image using another docker image as a template
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Allowing data to be passed in and out of a docker container and controlling which applications can do this". Mỗi container có mạng riêng, cô lập với máy host. Port forwarding (chuyển tiếp cổng), khai báo bằng tùy chọn -p khi chạy docker run, chẳng hạn -p 8888:8888, nối một cổng của máy host với một cổng bên trong container, nhờ đó yêu cầu từ bên ngoài như trình duyệt mở Jupyter hay gọi API Flask đi được vào container và phản hồi đi ra; chỉ những cổng được công bố mới truy cập được, tức là ta kiểm soát ứng dụng nào được giao tiếp. "The process of creating a data file on the local computer that persists" mô tả việc lưu trữ bền vững bằng volume hoặc bind mount. "Sending one container to multiple nodes on a multicloud environment" là việc của công cụ điều phối như Kubernetes. "Building one Docker image using another docker image as a template" là dùng base image qua chỉ thị FROM trong Dockerfile.
13What does a Docker container include?4 lựa chọn
AOnly the application code
BCode, runtime libraries, and a private filesystem
COnly the operating system
DOnly the database
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Code, runtime libraries, and a private filesystem". Container Docker là một tiến trình được đóng gói cùng mọi thứ ứng dụng cần để chạy: mã nguồn, môi trường thực thi (ví dụ trình thông dịch Python), các thư viện phụ thuộc và một hệ thống tệp riêng lấy từ image, tách biệt với máy chủ; các container dùng chung nhân hệ điều hành của máy chủ. "Only the application code" thiếu thư viện và môi trường chạy, chính là thứ container sinh ra để đóng gói nhằm chạy giống nhau ở mọi nơi. "Only the operating system" sai vì container không mang nhân hệ điều hành riêng như máy ảo, chỉ chứa các tệp không gian người dùng cần thiết. "Only the database" sai vì cơ sở dữ liệu chỉ là một loại ứng dụng có thể chạy trong container, không phải thành phần bắt buộc của mọi container.
14You may only pass a pickle file to save your model in the your Watson Machine Learning library.2 lựa chọn
ATrue
BFalse
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "False". Watson Machine Learning cho phép lưu và triển khai mô hình dưới nhiều dạng chứ không chỉ tệp pickle (định dạng tuần tự hoá đối tượng Python): có thể truyền trực tiếp đối tượng mô hình hoặc pipeline đang có trong bộ nhớ, tệp joblib của scikit-learn, mô hình Keras dạng h5, hay mô hình TensorFlow đóng gói nén, kèm siêu dữ liệu khai báo loại mô hình và môi trường phần mềm. Vì vậy phát biểu rằng chỉ được truyền tệp pickle là sai. Chọn "True" là nhầm vì pickle chỉ là một cách phổ biến với mô hình scikit-learn; việc giới hạn vào một định dạng duy nhất sẽ khiến các framework khác như TensorFlow hay PyTorch không triển khai được, trong khi thư viện được thiết kế để hỗ trợ nhiều framework.
15What is the purpose of the spark-submit command?4 lựa chọn
ATo create a Spark cluster
BTo submit applications to a Spark cluster
CTo monitor Spark jobs
DTo install Spark
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "To submit applications to a Spark cluster". spark-submit là script dòng lệnh dùng để gửi một ứng dụng Spark (tệp Python hoặc JAR) lên cụm, kèm các tuỳ chọn như địa chỉ master, chế độ deploy, bộ nhớ và số lõi cho executor. "To create a Spark cluster" sai vì cụm được dựng trước bằng trình quản lý như standalone, YARN hay Kubernetes; spark-submit chỉ gửi việc tới cụm đã có. "To monitor Spark jobs" sai vì theo dõi công việc thường làm qua Spark UI hoặc history server. "To install Spark" sai vì cài đặt là tải và cấu hình bản phân phối Spark, không liên quan tới lệnh gửi ứng dụng.
Apy-cuda, Cython
Bmultiprocessing, mpi4py
Csubprocessing, symmetric-multiprocessing
Dthreading, ipyparallel
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "subprocessing, symmetric-multiprocessing". Câu hỏi tìm danh sách có chứa thứ không phải gói Python cụ thể dùng để tăng tốc mã. Symmetric multiprocessing (đa xử lý đối xứng, SMP) là một kiến trúc phần cứng trong đó nhiều CPU dùng chung bộ nhớ, còn subprocessing không phải tên gói; module chuẩn của Python là subprocess, dùng để chạy chương trình con chứ không phải công cụ tăng hiệu năng. "py-cuda, Cython" không được chọn vì PyCUDA cho phép gọi nhân CUDA trên GPU và Cython biên dịch mã Python sang C, đều là gói tăng tốc cụ thể. "multiprocessing, mpi4py" không được chọn vì multiprocessing chạy song song trên nhiều tiến trình và mpi4py đưa chuẩn MPI vào Python để tính toán phân tán. "threading, ipyparallel" không được chọn vì threading chạy đa luồng, hiệu quả với tác vụ chờ I/O, và ipyparallel phân phối tác vụ tới cụm engine IPython, đều là gói thật cho song song hoá.
A
CythonB
mpi4pyC
TensorBoardD
ipyparallelLời giải
Mở trang câu hỏi này →Đáp án đúng: "TensorBoard". Tối ưu mã ở đây là làm chương trình chạy nhanh hơn, bằng cách biên dịch phần nặng sang mã máy hoặc chia việc ra nhiều lõi, nhiều máy. TensorBoard là bộ công cụ trực quan hóa quá trình huấn luyện của TensorFlow, hiển thị đường cong loss, đồ thị tính toán, phân bố trọng số; nó giúp theo dõi và gỡ lỗi mô hình chứ không làm mã chạy nhanh hơn, nên là đáp án của câu hỏi phủ định. Ba công cụ còn lại đều dùng để tối ưu mã nên không được chọn: "Cython" dịch mã kiểu Python có khai báo kiểu sang C rồi biên dịch, tăng tốc mạnh cho vòng lặp nặng; "mpi4py" đưa chuẩn MPI (Message Passing Interface, giao tiếp truyền thông điệp) vào Python để chạy song song trên nhiều tiến trình hoặc nhiều máy; "ipyparallel" cho phép điều phối một cụm engine IPython để chạy song song các tác vụ ngay từ notebook.
ATrue
BFalse
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "False". Một cụm Spark thường được quản lý bởi trình quản lý tài nguyên như Spark standalone, Hadoop YARN, Apache Mesos hoặc Kubernetes; trình này phân bổ executor cho driver và theo dõi tài nguyên của các node. Docker container và tệp YAML chỉ là một cách đóng gói hoặc mô tả cấu hình trong vài môi trường, ví dụ khi chạy Spark trên Kubernetes, chứ không phải cách quản lý cụm nói chung. Vì vậy "True" sai: nó biến một lựa chọn triển khai cụ thể thành quy tắc chung, trong khi phần lớn cụm Spark được vận hành qua trình quản lý cụm, không cần Docker hay YAML.
19What is the principal reason to create a virtual environment before creating your model locally?5 lựa chọn
ABecause all models should have their own virtual environment
BBecause it will ensure that the most recent packages are used
CBecause virtual environments can be containerized easily
DBecause the Python client for Watson Machine Learning has specific dependencies
EBecause it ensures that locally created/trained models are compatible with Watson Machine Learning
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Because it ensures that locally created/trained models are compatible with Watson Machine Learning". Khi huấn luyện mô hình trên máy cá nhân rồi triển khai lên Watson Machine Learning, môi trường chạy của dịch vụ chỉ hỗ trợ một số phiên bản Python và thư viện nhất định như scikit-learn hay TensorFlow; virtual environment (môi trường ảo) giúp ghim đúng các phiên bản đó để mô hình đã lưu ra tệp nạp và chạy được trên dịch vụ mà không lỗi lệch phiên bản. "Because all models should have their own virtual environment" sai vì đó là thói quen tốt chung chung chứ không nêu lý do chính trong bối cảnh triển khai này. "Because it will ensure that the most recent packages are used" sai vì mục tiêu ngược lại: cần đúng phiên bản được hỗ trợ, mà bản mới nhất có thể chưa được dịch vụ hỗ trợ. "Because virtual environments can be containerized easily" sai vì môi trường ảo không phải container, và đóng gói container không phải lý do ở đây. "Because the Python client for Watson Machine Learning has specific dependencies" sai vì phụ thuộc của thư viện client chỉ ảnh hưởng tới việc gọi API, còn điều quyết định là mô hình phải khớp với môi trường chạy của dịch vụ.
APass a pickle file when the model is declared
BSet the named parameters directly when the model is declared
CPass a ParamMap to the .fit() method of the model
DCreate a ParamMap, update it then pass it to a .fit() method of the model
EPass a ParamMap to the .fit() method of a pipeline
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Pass a pickle file when the model is declared". Spark MLlib nhận tham số theo cơ chế Param: đặt trực tiếp khi khởi tạo hoặc truyền một ParamMap (bảng ánh xạ tham số sang giá trị) vào phương thức fit, và ParamMap truyền vào fit sẽ ghi đè giá trị đã đặt; tệp pickle là dạng tuần tự hoá đối tượng Python, không phải cách khai báo tham số, nên đây là cách không hợp lệ. "Set the named parameters directly when the model is declared" hợp lệ, ví dụ LogisticRegression(maxIter=10). "Pass a ParamMap to the .fit() method of the model" hợp lệ vì fit nhận ParamMap tuỳ chọn. "Create a ParamMap, update it then pass it to a .fit()" hợp lệ vì ParamMap là từ điển có thể cập nhật trước khi dùng. "Pass a ParamMap to the .fit() method of a pipeline" hợp lệ vì Pipeline cũng là Estimator và ParamMap có thể chứa tham số của từng giai đoạn.