Skip to content

Commit ce07bde

Browse files
committed
rpc : add command line option for number of threads for the CPU backend (ggml-org#13060)
closes ggml-org#13051 Signed-off-by: rayylee <[email protected]>
1 parent 99a82ea commit ce07bde

File tree

1 file changed

+16
-2
lines changed

1 file changed

+16
-2
lines changed

examples/rpc/rpc-server.cpp

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,17 +24,21 @@
2424
#endif
2525
#include <string>
2626
#include <stdio.h>
27+
#include <algorithm>
28+
#include <thread>
2729

2830
struct rpc_server_params {
2931
std::string host = "127.0.0.1";
3032
int port = 50052;
3133
size_t backend_mem = 0;
34+
int n_threads = std::max(1U, std::thread::hardware_concurrency()/2);
3235
};
3336

3437
static void print_usage(int /*argc*/, char ** argv, rpc_server_params params) {
3538
fprintf(stderr, "Usage: %s [options]\n\n", argv[0]);
3639
fprintf(stderr, "options:\n");
3740
fprintf(stderr, " -h, --help show this help message and exit\n");
41+
fprintf(stderr, " -t, --threads number of threads for the CPU backend (default: %d)\n", params.n_threads);
3842
fprintf(stderr, " -H HOST, --host HOST host to bind to (default: %s)\n", params.host.c_str());
3943
fprintf(stderr, " -p PORT, --port PORT port to bind to (default: %d)\n", params.port);
4044
fprintf(stderr, " -m MEM, --mem MEM backend memory size (in MB)\n");
@@ -50,6 +54,15 @@ static bool rpc_server_params_parse(int argc, char ** argv, rpc_server_params &
5054
return false;
5155
}
5256
params.host = argv[i];
57+
} else if (arg == "-t" || arg == "--threads") {
58+
if (++i >= argc) {
59+
return false;
60+
}
61+
params.n_threads = std::stoi(argv[i]);
62+
if (params.n_threads <= 0) {
63+
fprintf(stderr, "error: invalid number of threads: %d\n", params.n_threads);
64+
return false;
65+
}
5366
} else if (arg == "-p" || arg == "--port") {
5467
if (++i >= argc) {
5568
return false;
@@ -75,7 +88,7 @@ static bool rpc_server_params_parse(int argc, char ** argv, rpc_server_params &
7588
return true;
7689
}
7790

78-
static ggml_backend_t create_backend() {
91+
static ggml_backend_t create_backend(const rpc_server_params & params) {
7992
ggml_backend_t backend = NULL;
8093
#ifdef GGML_USE_CUDA
8194
fprintf(stderr, "%s: using CUDA backend\n", __func__);
@@ -107,6 +120,7 @@ static ggml_backend_t create_backend() {
107120
if (!backend) {
108121
fprintf(stderr, "%s: using CPU backend\n", __func__);
109122
backend = ggml_backend_cpu_init();
123+
ggml_backend_cpu_set_n_threads(backend, params.n_threads);
110124
}
111125
return backend;
112126
}
@@ -151,7 +165,7 @@ int main(int argc, char * argv[]) {
151165
fprintf(stderr, "\n");
152166
}
153167

154-
ggml_backend_t backend = create_backend();
168+
ggml_backend_t backend = create_backend(params);
155169
if (!backend) {
156170
fprintf(stderr, "Failed to create backend\n");
157171
return 1;

0 commit comments

Comments
 (0)