実現したいこと
AWSを借りる必要があり, Pythonスクリプトの使用メモリ量を見積りたいです, 今実行してるスクリプトがpythonのmultiprocessingを使っていてtopの結果が画像のようになります. PID 1298889-94は同一スクリプトからマルチプロセスによって生成されたプロセスです. この場合総メモリ使用量はどのように見積もればよいでしょうか?主に2つの質問があります. マルチプロセスの開始方法にはspawnを用いています.
- VIRTとRESのどちらを見るのがよいでしょうか?自分の理解だとRESを見ればよく2.5GBx4という印象があるのですが最悪35GBx4になることもあるのでしょうか?
- マルチプロセスを用いた場合使用メモリは単純にプロセス数倍になるのでしょうか?
試したこと
https://www.haya-programming.com/entry/2016/12/28/082947
https://www.haya-programming.com/entry/2018/12/28/203555
によると, 上の記事ではマルチプロセスにした場合使用メモリはプロセス倍になると述べられてます. 一方で下ではspawnを用いた場合は必要な部分のみ複製されこのmatmulに必要なメモリのプロセス数倍になるかと思っています.
該当のコード
python
1def matmul(inputs): 2 customer_x, item_x = inputs 3 customers = torch.arange(customer_x.size(0)) 4 rating_all = [] 5 for batch_users in tqdm(minibatch(customers, batch_size=TEST_BATCH_SIZE)): 6 rating = customer_x[batch_users] @ item_x.T 7 _, rating_top_500 = torch.topk(rating, k=500) 8 rating_all.append(rating_top_500) 9 del rating, _ 10 rating_all = torch.cat(rating_all) 11 12 return rating_all 13 14 15customer_x, item_x = model.getUsersRating() 16del model 17process_num = 8 18customer_per_process = customer_x.size(0)//process_num 19xs = [(customer_x[customer_per_process*i:customer_per_process*(i+1)], item_x) if i!=process_num-1 else \ 20 (customer_x[customer_per_process*i:], item_x) for i in range(process_num)] 21del customer_x 22p = Pool(process_num) 23rating_all = p.map(matmul, xs) 24p.close()
補足情報(FW/ツールのバージョンなど)
python 3.10
pytorch

あなたの回答
tips
プレビュー