@@ -28,6 +28,7 @@ function start_service() {
28
28
sleep 1m
29
29
}
30
30
31
+
31
32
function validate_microservice() {
32
33
cd $LOG_PATH
33
34
export no_proxy=" localhost,127.0.0.1," ${ip_address}
@@ -79,8 +80,10 @@ function validate_microservice() {
79
80
HTTP_RESPONSE=$( curl --silent --write-out " HTTPSTATUS:%{http_code}" -X POST -H ' Content-Type: application/json' -d ' {"training_file": "test_embed_data.json","model": "BAAI/bge-base-en-v1.5","General":{"task":"embedding","lora_cofig":null,"save_strategy":"epoch"},"Dataset":{"query_max_len":128,"passage_max_len":128,"padding":"max_length"},"Training":{"epochs":3}}' " $URL " )
80
81
HTTP_STATUS=$( echo $HTTP_RESPONSE | tr -d ' \n' | sed -e ' s/.*HTTPSTATUS://' )
81
82
RESPONSE_BODY=$( echo $HTTP_RESPONSE | sed -e ' s/HTTPSTATUS\:.*//g' )
83
+ FINTUNING_ID=$( echo " $RESPONSE_BODY " | jq -r ' .id' )
82
84
SERVICE_NAME=" finetuning-server - create finetuning job"
83
85
86
+
84
87
if [ " $HTTP_STATUS " -ne " 200" ]; then
85
88
echo " [ $SERVICE_NAME ] HTTP status is not 200. Received status was $HTTP_STATUS "
86
89
docker logs finetuning-server >> ${LOG_PATH} /finetuning-server_create.log
@@ -96,10 +99,80 @@ function validate_microservice() {
96
99
echo " [ $SERVICE_NAME ] Content is as expected."
97
100
fi
98
101
99
- sleep 10m
102
+ # test /v1/fine_tuning/jobs/retrieve
103
+ URL=" http://${ip_address} :$finetuning_service_port /v1/fine_tuning/jobs/retrieve"
104
+ for(( i= 1 ;i<= 10 ;i++ )) ;
105
+ do
106
+ HTTP_RESPONSE=$( curl --silent --write-out " HTTPSTATUS:%{http_code}" -X POST -H " Content-Type: application/json" -d ' {"fine_tuning_job_id": "' $FINTUNING_ID ' "}' " $URL " )
107
+ echo $HTTP_RESPONSE
108
+ RESPONSE_BODY=$( echo $HTTP_RESPONSE | sed -e ' s/HTTPSTATUS\:.*//g' )
109
+ STATUS=$( echo " $RESPONSE_BODY " | jq -r ' .status' )
110
+ if [[ " $STATUS " == " succeeded" ]]; then
111
+ echo " training: succeeded."
112
+ break
113
+ elif [[ " $STATUS " == " failed" ]]; then
114
+ echo " training: failed."
115
+ exit 1
116
+ else
117
+ echo " training: '$STATUS '"
118
+ fi
119
+ sleep 1m
120
+ done
121
+
122
+ # test /v1/finetune/list_checkpoints
123
+ URL=" http://${ip_address} :$finetuning_service_port /v1/finetune/list_checkpoints"
124
+ HTTP_RESPONSE=$( curl --silent --write-out " HTTPSTATUS:%{http_code}" -X POST -H " Content-Type: application/json" -d ' {"fine_tuning_job_id": "' $FINTUNING_ID ' "}' " $URL " )
125
+ echo $HTTP_RESPONSE
126
+ RESPONSE_BODY=$( echo $HTTP_RESPONSE | sed -e ' s/HTTPSTATUS\:.*//g' )
127
+ fine_tuned_model_checkpoint=$( echo " $RESPONSE_BODY " | jq -r ' .[0].fine_tuned_model_checkpoint' )
128
+ echo $fine_tuned_model_checkpoint
129
+
130
+ echo " start resume checkpoint............................................."
131
+ # resume checkpoint /v1/fine_tuning/jobs
132
+ URL=" http://${ip_address} :$finetuning_service_port /v1/fine_tuning/jobs"
133
+ HTTP_RESPONSE=$( curl --silent --write-out " HTTPSTATUS:%{http_code}" -X POST -H ' Content-Type: application/json' -d ' {"training_file": "test_embed_data.json","model": "BAAI/bge-base-en-v1.5","General":{"task":"embedding","lora_cofig":null,"save_strategy":"epoch","resume_from_checkpoint":"' $fine_tuned_model_checkpoint ' "},"Dataset":{"query_max_len":128,"passage_max_len":128,"padding":"max_length"},"Training":{"epochs":5}}' " $URL " )
134
+ HTTP_STATUS=$( echo $HTTP_RESPONSE | tr -d ' \n' | sed -e ' s/.*HTTPSTATUS://' )
135
+ RESPONSE_BODY=$( echo $HTTP_RESPONSE | sed -e ' s/HTTPSTATUS\:.*//g' )
136
+ FINTUNING_ID=$( echo " $RESPONSE_BODY " | jq -r ' .id' )
137
+ SERVICE_NAME=" finetuning-server - resume checkpoint"
138
+
139
+
140
+ if [ " $HTTP_STATUS " -ne " 200" ]; then
141
+ echo " [ $SERVICE_NAME ] HTTP status is not 200. Received status was $HTTP_STATUS "
142
+ docker logs finetuning-server >> ${LOG_PATH} /finetuning-server_create.log
143
+ exit 1
144
+ else
145
+ echo " [ $SERVICE_NAME ] HTTP status is 200. Checking content..."
146
+ fi
147
+ if [[ " $RESPONSE_BODY " != * ' {"id":"ft-job' * ]]; then
148
+ echo " [ $SERVICE_NAME ] Content does not match the expected result: $RESPONSE_BODY "
149
+ docker logs finetuning-server >> ${LOG_PATH} /finetuning-server_create.log
150
+ exit 1
151
+ else
152
+ echo " [ $SERVICE_NAME ] Content is as expected."
153
+ fi
154
+
155
+ # check training status /v1/fine_tuning/jobs/retrieve
156
+ URL=" http://${ip_address} :$finetuning_service_port /v1/fine_tuning/jobs/retrieve"
157
+ for(( i= 1 ;i<= 10 ;i++ )) ;
158
+ do
159
+ HTTP_RESPONSE=$( curl --silent --write-out " HTTPSTATUS:%{http_code}" -X POST -H " Content-Type: application/json" -d ' {"fine_tuning_job_id": "' $FINTUNING_ID ' "}' " $URL " )
160
+ echo $HTTP_RESPONSE
161
+ RESPONSE_BODY=$( echo $HTTP_RESPONSE | sed -e ' s/HTTPSTATUS\:.*//g' )
162
+ STATUS=$( echo " $RESPONSE_BODY " | jq -r ' .status' )
163
+ if [[ " $STATUS " == " succeeded" ]]; then
164
+ echo " training: succeeded."
165
+ break
166
+ elif [[ " $STATUS " == " failed" ]]; then
167
+ echo " training: failed."
168
+ exit 1
169
+ else
170
+ echo " training: '$STATUS '"
171
+ fi
172
+ sleep 1m
173
+ done
174
+
100
175
101
- # get logs
102
- docker logs finetuning-server >> ${LOG_PATH} /finetuning-server_create.log
103
176
}
104
177
105
178
function stop_docker() {
0 commit comments