#amazon-ec2 #multiprocessing #cluster-computing #distributed-computing #ray
#amazon-ec2 #многопроцессорная обработка #кластерные вычисления #распределенные вычисления #ray
Вопрос:
Проблема, с которой я сталкиваюсь, заключается в том, что ray не будет распространяться на моих рабочих
В совокупности у меня 16 ядер, так как у меня 8 процессоров на каждом экземпляре ec2 aws ubuntu.
Однако, когда я запускаю свой лучевой кластер и отправляю свой скрипт на python, он распределяется только по 8 ядрам, поскольку показано, что используется только 8 pid.
также примечательно, что я не могу получить доступ к панели управления ray на экземпляре EC2, я получаю эту информацию только путем печати используемых идентификаторов pid.
Как мне сделать так, чтобы мой скрипт был утилизирован всеми 16 процессорами и, следовательно, показывал 16 идентификаторов, используемых для выполнения скрипта?
Это мой сценарий:
import os
import ray
import time
import xgboost
from xgboost.sklearn import XGBClassifier
def printer():
print("INSIDE WORKER " str(time.time()) " PID : " str(os.getpid()))
# decorators allow for futures to be created for parallelization
@ray.remote
def func_1():
#model = XGBClassifier()
count = 0
for i in range(100000000):
count = 1
printer()
return count
@ray.remote
def func_2():
#model = XGBClassifier()
count = 0
for i in range(100000000):
count = 1
printer()
return count
@ray.remote
def func_3():
count = 0
for i in range(100000000):
count = 1
printer()
return count
def main():
#model = XGBClassifier()
start = time.time()
results = []
ray.init(address='auto')
#append fuction futures
for i in range(10):
results.append(func_1.remote())
results.append(func_2.remote())
results.append(func_3.remote())
#run in parrallel and get aggregated list
a = ray.get(results)
b = 0
#add all values in list together
for j in range(len(a)):
b = a[j]
print(b)
#time to complete
end = time.time()
print(end - start)
if __name__ == '__main__':
main()
Это мой конфиг:
# A unique identifier for the head node and workers of this cluster.
cluster_name: basic-ray-123454
# The maximum number of workers nodes to launch in addition to the head
# node. This takes precedence over min_workers. min_workers defaults to 0.
max_workers: 2 # this means zero workers
min_workers: 2 # this means zero workers
# Cloud-provider specific configuration.
provider:
type: aws
region: eu-west-2
availability_zone: eu-west-2a
file_mounts_sync_continuously: False
auth:
ssh_user: ubuntu
ssh_private_key: /home/user/.ssh/aws_ubuntu_test.pem
head_node:
InstanceType: c5.2xlarge
ImageId: ami-xxxxxxa6b31fd2c
KeyName: aws_ubuntu_test
BlockDeviceMappings:
- DeviceName: /dev/sda1
Ebs:
VolumeSize: 200
worker_nodes:
InstanceType: c5.2xlarge
ImageId: ami-xxxxx26a6b31fd2c
KeyName: aws_ubuntu_test
file_mounts: {
"/home/ubuntu": "/home/user/RAY_AWS_DOCKER/ray_example_2_4/conda_env.yaml"
}
setup_commands:
- echo "start initialization_commands"
- sudo apt-get update
- sudo apt-get upgrade
- sudo apt-get install -y python-setuptools
- sudo apt-get install -y build-essential curl unzip psmisc
- pip install --upgrade pip
- pip install ray[all]
- echo "all files :"
- ls
# - conda install -c conda-forge xgboost
head_start_ray_commands:
- ray stop
- ulimit -n 65536; ray start --head --port=6379 --object-manager-port=8076 --autoscaling-config=~/ray_bootstrap_config.yaml
worker_start_ray_commands:
- ray stop
- ulimit -n 65536; ray start --address=$RAY_HEAD_IP:6379 --object-manager-port=8076
Комментарии:
1. Можете ли вы попробовать ray.get_available_resources() и убедиться, что в вашем кластере действительно 16 num_cpu? Кроме того, можете ли вы попробовать добавить print(os.get_pid()) в каждую задачу, чтобы убедиться, что одновременно выполняется только 8 задач?