This topic uses Python as an example to describe how to use the Serverless Devs development
tool to deploy sample code to the Function Compute console and install related dependencies.
Background information
By uploading a photo of a cat or dog, identify whether the animal in the photo is
a cat or a dog.

For more information about this example, see Sample project.
Procedure
- Run the following command to clone the project:
git clone https://github.com/awesome-fc/cat-dog-classify.git
- Install dependencies.
- Run the following command to go to the project directory in which the project data
is stored:
- Run the following command to install dependencies:
s build
The following output is returned:
[2021-12-09 07:26:39] [INFO] [S-CLI] - Start ...
[2021-12-09 07:26:40] [INFO] [FC-BUILD] - Build artifact start...
[2021-12-09 07:26:40] [INFO] [FC-BUILD] - Use docker for building.
[2021-12-09 07:26:40] [INFO] [FC-BUILD] - Build function using image: registry.<regionId>.aliyuncs.com/aliyunfc/runtime-python3.6:build-1.9.20
[2021-12-09 07:26:40] [INFO] [FC-BUILD] - begin pulling image registry.<regionId>.aliyuncs.com/aliyunfc/runtime-python3.6:build-1.9.20, you can also use docker pull registry.cn-beijing.aliyuncs.com/aliyunfc/runtime-python3.6:build-1.9.20 to pull image by yourself.
build-1.9.20: Pulling from aliyunfc/runtime-python3.6
f49cf87b52c1: Already exists
......
01ce50b4eb85: Already exists
02b807385deb: Pull complete
......
9b9fdb8de506: Pull complete
Digest: sha256:a9a6dab2d6319df741ee135d9749a90b2bb834fd11ee265d1fb106053890****
Status: Downloaded newer image for registry.<regionId>.aliyuncs.com/aliyunfc/runtime-python3.6:build-1.9.20
builder begin to build
[2021-12-09 07:27:57] [INFO] [FC-BUILD] - Build artifact successfully.
Tips for next step
======================
* Invoke Event Function: s local invoke
* Invoke Http Function: s local start
* Deploy Resources: s deploy
End of method: build
After you run the command to install dependencies, Serverless Devs automatically installs
the related dependency package and downloads the third-party libraries to the .s/build/artifacts/cat-dog/classify/.s/python directory.
- Upload dependencies to NAS.
When you install dependencies, the code package referenced by the Function Compute may be larger than the code package limit after decompression. To reduce the size
of the code package, you can store the dependencies with large memory and relatively
large model parameter files in NAS.
- Run the following command to initialize the NAS file system.
s nas init
The following output is returned:
[2021-12-09 07:29:58] [INFO] [S-CLI] - Start ...
[2021-12-09 07:29:59] [INFO] [FC-DEPLOY] - Using region: cn-shenzhen
[2021-12-09 07:29:59] [INFO] [FC-DEPLOY] - Using access alias: default
[2021-12-09 07:29:59] [INFO] [FC-DEPLOY] - Using accessKeyID: LTAI4G4cwJkK4Rza6xd9****
[2021-12-09 07:29:59] [INFO] [FC-DEPLOY] - Using accessKeySecret: eCc0GxSpzfq1DVspnqqd6nmYNN****
......
[2021-12-09 07:30:01] [INFO] [FC-DEPLOY] - Generated vpcConfig:
securityGroupId: sg-wz90u1syk2h1f14b****
vSwitchId: vsw-wz9qnuult4q5g4f7n****
vpcId: vpc-wz9x9bzs0wtvjgt6n****
......
[2021-12-09 07:30:15] [INFO] [FC-DEPLOY] - Checking Trigger httpTrigger exists
Make service _FC_NAS_cat-dog success.
Make function _FC_NAS_cat-dog/nas_dir_checker success.
Make trigger _FC_NAS_cat-dog/nas_dir_checker/httpTrigger success.
[2021-12-09 07:30:25] [INFO] [FC-DEPLOY] - Checking Service _FC_NAS_cat-dog exists
[2021-12-09 07:30:25] [INFO] [FC-DEPLOY] - Checking Function nas_dir_checker exists
[2021-12-09 07:30:26] [INFO] [FC-DEPLOY] - Checking Trigger httpTrigger exists
There is auto config in the service: _FC_NAS_cat-dog
[2021-12-09 07:30:26] [INFO] [FC-DEPLOY] - Generated nasConfig:
groupId: 10003
mountPoints:
- fcDir: /mnt/auto
nasDir: /cat-dog
serverAddr: 2bfb748****.cn-shenzhen.nas.aliyuncs.com
userId: 10003
cat-dog:
userId: 10003
groupId: 10003
mountPoints:
-
serverAddr: 2bfb748****.cn-shenzhen.nas.aliyuncs.com
nasDir: /cat-dog
fcDir: /mnt/auto
- Run the following command to upload the dependencies to NAS:
s nas upload -r .s/build/artifacts/cat-dog/classify/.s/python/ /mnt/auto/python
The following output is returned:
[2021-12-09 07:33:14] [INFO] [S-CLI] - Start ...
Packing ...
Package complete.
Upload done
Tips for next step
======================
* Invoke remote function: s invoke
End of method: nas
- Run the following command to upload the model to NAS:
s nas upload -r src/model/ /mnt/auto/model
The following output is returned:
[2021-12-09 07:52:26] [INFO] [S-CLI] - Start ...
Packing ...
Package complete.
Upload done
Tips for next step
======================
* Invoke remote function: s invoke
End of method: nas
- Run the following command to view the NAS directory:
s nas command ls /mnt/auto/
The following output is returned:
[2021-12-09 07:53:01] [INFO] [S-CLI] - Start ...
model
python
Tips for next step
======================
* Invoke remote function: s invoke
End of method: nas
- Run the following command to deploy the project:
s deploy
The following output is returned:
[2021-12-09 07:56:15] [INFO] [S-CLI] - Start ...
[2021-12-09 07:56:16] [INFO] [FC-DEPLOY] - Using region: cn-shenzhen
[2021-12-09 07:56:16] [INFO] [FC-DEPLOY] - Using access alias: default
[2021-12-09 07:56:16] [INFO] [FC-DEPLOY] - Using accessKeyID: LTAI4G4cwJkK4Rza6xd9****
[2021-12-09 07:56:16] [INFO] [FC-DEPLOY] - Using accessKeySecret: eCc0GxSpzfq1DVspnqqd6nmYNN****
......
[2021-12-09 07:56:19] [INFO] [FC-DEPLOY] - Generated logConfig:
enableInstanceMetrics: true
enableRequestMetrics: true
logBeginRule: ~
logstore: fc-service-cat-dog-logstore
project: 188077086902****-cn-shenzhen-logproject
......
There is auto config in the service: cat-dog
Tips for next step
======================
* Display information of the deployed resource: s info
* Display metrics: s metrics
* Display logs: s logs
* Invoke remote function: s invoke
* Remove Service: s remove service
* Remove Function: s remove function
* Remove Trigger: s remove trigger
* Remove CustomDomain: s remove domain
cat-dog:
region: cn-shenzhen
service:
name: cat-dog
function:
name: classify
runtime: python3
handler: predict.handler
memorySize: 1024
timeout: 120
url:
system_url: https://188077086902****.cn-shenzhen.fc.aliyuncs.com/2016-08-15/proxy/cat-dog/classify/
custom_domain:
-
domain: http://classify.cat-dog.188077086902****.cn-shenzhen.fc.devsapp.net
triggers:
-
type: http
name: httpTrigger
After the project is successfully deployed, you can view the temporary domain name
generated by the
Function Compute in the execution output. You can use this domain name to access the function you
just deployed. For example, you can use a browser to access the domain name and then
select the target image to identify the animals in the graph:

Note The temporary domain name is used only for demonstration and development purposes.
It is valid for a limited period of time. You must use a domain name that has obtained
an Internet Content Provider (ICP) filing from Alibaba Cloud for production. For more
information, see
Configure a custom domain name.
Use reservations to eliminate cold start glitches
The Function Compute features dynamic scaling and automatically scales out the execution environment based
on the number of concurrent requests. In this typical deep learning example, it takes
a long time to load dependencies and model parameters. In a function of the 1 GB specification
that you set, the time for concurrent access is about 10s, and sometimes it may be
greater than 20s.
Therefore, it is inevitable that the function call glitch will occur, that is, the
cold start time is greater than 10s. In this case, you can use the set reservation
method to avoid cold start. You can run the following command in the project directory
to remove the cold start glitch:
s provision put --target 10 --qualifier LATEST
At the same time, when you need to understand the maximum capacity of the server for
better running and development, you can use the stress test command of Serverless
Devs to perform stress tests on the specified functions.
Notice After you complete the stress test, run the following command to cancel the reservation:
s provision put --target 0 --qualifier LATEST